61. 旋转链表

知识点:链表;

题目描述

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3] 输入:head = [0,1,2], k = 4
输出:[2,0,1]

解法一:解析

观察可以发现,右移k个节点其实就是以倒数第k个节点作为头节点,即正数第n-k+1个节点作为头节点;

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
//向右移动k个节点就是倒数第k个节点作为头节点;即正着数第n-k+1个;
if(k == 0 || head == null) return head;
ListNode cur = head;
int n = 1;
while(cur.next != null){
cur = cur.next;
n++; //获得链表长度;
}
int m = n - k % n; //用来获取正着数节点在哪;
cur.next = head; //闭合成环;
while(m > 0){
cur = cur.next;
m--; //指针停在新链表的尾结点;
}
ListNode newHaed = cur.next;
cur.next = null; //断开环;
return newHaed;
}
}

时间复杂度:O(N);

空间复杂度:O(1);

体会

对于链表的while循环

//1.如果最后我们只是想把链表遍历一遍,不需要最后那个指针;
//cur最后停留在了最后的尾节点null上;
while(cur != null){
...
cur = cur.next;
}
//2.如果我们想遍历一遍链表,而且最后一个指针我们之后还有用的;
//cur最后停留在了最后一个节点上。
while(cur.next != null){
...
cur = cur.next;
...
}

获取链表的长度

//写法1:
int n = 1; //注意n从1开始。
while(cur.next != null){
cur = cur.next;//指针最后在尾节点;
n++;
}
//写法2:不用这种!
int n = 0;
while(cur != null){
cur = cur.next; //指针停在null上;
n++;
}

相关题目

链表中倒数第k个节点

参考链接

旋转链表

最新文章

  1. 读《乔布斯的NeXT和苹果之间,隔了这两个创业常识》
  2. [LeetCode] Path Sum II 二叉树路径之和之二
  3. 第16章 调色板管理器_16.4 一个DIB位图库的实现(1)
  4. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之六
  5. Python 时间 日期常见操作
  6. swift 闭包简写实际参数名$0、$1等理解
  7. zabbix邮件报警脚本(Python)
  8. PHP判断远程文件是否存在的几种方法
  9. 策略模式Strategy——坐什么车回家?
  10. 常见MD5加密解密值及免费解密网站
  11. VirtualBox虚拟机网络设置(四种方式)
  12. 使用nio遍历文件夹
  13. Mac学习
  14. JVM-索引
  15. python框架之Flask(1)-Flask初使用
  16. centos 6.5 搭建zookeeper集群
  17. Windows 7上安装配置TensorFlow-GPU运算环境
  18. WPF设置控件获得焦点FocusManager
  19. java原生文件打包
  20. CERC2017 Gambling Guide,最短路变形,期望dp

热门文章

  1. OneFlow 概念清单
  2. Docker App应用
  3. Vue项目开发环境搭建
  4. 【NX二次开发】Block UI 选择节点
  5. UF_EVAL 曲线或边分析
  6. 【Java】Debug断点调试常用技巧
  7. 通过Z-Order技术加速Hudi大规模数据集分析方案
  8. 常用的16个Java实用工具类,Java开发人员请收藏!
  9. 数位dp从会打模板到不会打模板
  10. 环境安装——MySQL安装