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


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


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. [LOJ 6213]「美团 CodeM 决赛」radar

    [LOJ 6213]「美团 CodeM 决赛」radar 题意 给定 \(n\) 个横坐标 \(x_i\) , 为它们选择一个不超过 \(y_i\) 的纵坐标 \(h_i\), 产生 \(c_ih_i ...

  2. (三十一)golang--面向对象之工厂模式

    golang面向对象中是不存在构造函数的,可以使用工厂模式.   使用工厂模式,让即使不是大写的变量可以被外部包使用.

  3. FaaS(函数即服务) + BaaS(后台即服务)

    作者 | 黄子毅(紫益) 阿里前端技术专家 导读:前端开发者是最早享受到 “Serverless” 好处的群体,因为浏览器就是一个开箱即用.甚至无需为计算付费的环境!Serverless 把前端开发体 ...

  4. Flask-Moment本地化日期和时间

    moment.js客户端开源代码库,可以在浏览器中渲染日期和时间.Flask-Moment是一个flask程序扩展,能把moment.js集成到Jinja2模板中. 1.安装 pip install ...

  5. eclipse快速给表达式生成对应变量的快捷键

    这里记录下在Eclipse中快速给表达式生成对应变量的快捷键,有两种方式. [Ctrl + 2] 光标放在该表达式行的任意位置,按[Ctrl+2],会弹出提示,根据提示选择[F/L/R],就会自动生成 ...

  6. SQL和T-SQL之间的区别

    对于SQL,在我的上一篇博客中<何谓SQL Server数据库?与Access数据库 有什么区别>里面,已经着重说明了SQL作为访问和处理数据库的标准的计算机语言,所以这里就不做过多强调. ...

  7. 高效并发一 Java内存模型与Java线程(绝对干货)

    高效并发一 Java内存模型与Java线程 本篇文章,首先了解虚拟机Java 内存模型的结构及操作,然后讲解原子性,可见性,有序性在 Java 内存模型中的体现,最后介绍先行发生原则的规则和使用. 在 ...

  8. 深入理解Java对象

    深入理解Java对象(理清关系) 1.对象的创建过程: 所有创建过程如下所示: new 类名 根据new的参数在常量池中定位一个类的符号引用. 如果没有找到这个符号引用,说明类还没有被加载,则进行类的 ...

  9. postgresql 相关函数总结

    1.获取当前日期的年份 select to_char(t.detect_date,'YYYY') select extract(year from now())为double precision 格式 ...

  10. 利用Injecttion优化编辑的速度,你不是缺一台性能优化的电脑而是缺一个快速编译的工具~

    请前往如下的链接查看优化编译速度: https://www.jianshu.com/p/b2a2f15a3283