链表中的点已经相连,一次旋转操作意味着:


  • 先将链表闭合成环
  • 找到相应的位置断开这个环,确定新的链表头和链表尾


class Solution{
public:
ListNode* rotateRight(ListNode* head,int k)
{
//判断是否为空或者是不是只有一个结点
if(head==NULL || head->next==NULL) return head; ListNode* oldTail=head;
int n;//链表长度啊
for(n=;oldTail!=NULL;n++)
oldTail=oldTail->next;
oldTail->next=head;
//寻找新的头结点啦
ListNode* new_tail=head;
k=k%n;//防止循环性移动哈
for(int i=;i<n-k-;i++)
new_tail=new_tail->next;
ListNode* newHead=new_tail->next;
new_tail->next=NULL;
return head;
}
};

复杂度分析

  • 时间复杂度:O(N)O(N),其中 NN 是链表中的元素个数
  • 空间复杂度:O(1)O(1),因为只需要常数的空间

自己实现的,只不过没考虑到环,但是也差不多这个意思吧

class Solution{
public:
ListNode* rotateRight(ListNode* head,int k)
{
//特殊情况1
if(head==NULL || head->next==NULL) return head;
ListNode* p=head;
ListNode* pre=NULL;
ListNode* lastNode=NULL;
int count_num=;
//统计总数
while(p!=NULL)
{
count_num++;
lastNode=p;
p=p->next;
} //做处理,防止周期性移动
k=k%count_num;
//特殊情况2
if(k==)
return head;
//p归位
p=head;
for(int i=;i<count_num-k;i++)
{
pre=p;
p=p->next;
}
pre->next=NULL;
lastNode->next=head;
head=lastNode;
return head; }
};

我这样写就多了个k=0的情况的分析,而形成环之后就不用考虑这个特殊情况,因为永远没有哪个结点的下一个结点是NULL

Leetcode61.旋转链表的更多相关文章

  1. [Swift]LeetCode61. 旋转链表 | Rotate List

    Given a linked list, rotate the list to the right by k places, where k is non-negative. Example 1: I ...

  2. Leetcode61. Rotate List旋转链表

    给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ...

  3. [LeetCode] Rotate List 旋转链表

    Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...

  4. LeetCode 链表(旋转链表61)

    /* * 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. * 构造一个环,对链表进行处理. * *实现原理:先遍历一遍,得出链表长度,注意K可能大于len,之后令k% ...

  5. LeetCode(61):旋转链表

    Medium! 题目描述: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, ...

  6. 61. 旋转链表-leetcode

    给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ...

  7. 【LeetCode题解】61_旋转链表(Rotate-List)

    目录 描述 解法:双指针 思路 Java 实现 Python 实现 复杂度分析 描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1-> ...

  8. 旋转链表(所有元素往右移) rotate list

    [抄题]: 给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数 样例 给出链表1->2->3->4->5->null和k=2 返回4->5-& ...

  9. LeetCode:旋转链表【61】

    LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...

随机推荐

  1. 【day05】php

    一.时间日期函数库 1.安装:时间日期函数库PHPCORE组成部分 2.  (1)date_default_timezone_set(string $timezone)          设置时区  ...

  2. Web前端开发框架大全-详述

    可以说,前端技术的发展是互联网自身发展的一个缩影! 前端技术的发展经历了web1.0时代,即网页只能展示信息,几乎没有交互可言: web2.0时代,web2.0不再是单维的,逐渐发展为双向交流,另一特 ...

  3. [日常] NOI前划水日记

    NOI前划水日记 开坑记录一下每天的效率有多低 5.24 早上被春哥安排了一场NEERC(不过怎么是qualification round啊) 省队势力都跑去参加THU/PKU夏令营了...剩下四个D ...

  4. vue+element 动态表单验证

    公司最近的项目有个添加动态表单的需求,总结一下我在表单验证上遇到的一些坑. 如图是功能的需求,这个功能挺好实现的,但是表单验证真是耗费了我一些功夫. vue+element在表单验证上有一些限制,必须 ...

  5. DNA Sorting POJ - 1007

    DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 114211   Accepted: 45704 De ...

  6. nginx代理tcp请求

    1.概述 ngx_stream_core_module 这个module在nginx1.90后开始支持.开启nginx的tcp代理支持--with-stream=dynamic --with-stre ...

  7. Kubernetes 弹性伸缩全场景解读(二)- HPA 的原理与演进

    前言 在上一篇文章 Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局中,我们介绍了在 Kubernetes 在处理弹性伸缩时的设计理念以及相关组件的布局,在今天这篇文章中,会为大家 ...

  8. go 1.11 模块和版本管理

    自2007年“三巨头(Robert Griesemer, Rob Pike, Ken Thompson)”提出设计和实现Go语言以来,Go语言已经发展和演化了十余年了.这十余年来,Go取得了巨大的成就 ...

  9. ASP.NET Core MVC 之依赖注入 View

    ASP.NET Core 支持在试图中使用依赖注入.这将有助于提供视图专用的服务,比如本地化或者仅用于填充视图元素的数据.应尽量保持控制器和视图之间的关注点分离.视图所显示的大部分数据应该从控制器传入 ...

  10. Flask--数据库连接池

    目录 数据库连接池 pymsql链接数据库 数据库连接池版 数据库连接池 pymsql链接数据库 import pymysql conn = pymysql.connect(host='127.0.0 ...