[LeetCode] Rotate List

news/2024/7/3 4:28:31

Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given 1->2->3->4->5->NULL and k = 2, return 4->5->1->2->3->NULL.

Time Complexity
计算LinkedList长度: O(N)
O(N) + O(N) + O(N) = O(N)
Space Complexity
O(1)

思路

这题在做之前有很多地方没有写清楚,所以要做好clarify。如果k == 0, k == len的话,是不需要反转的。这里的k是一个circular的概念,如果超过了LinkedList的长度,就用k % len。为了让代码更好写,一开始直接定义好n == k % len,这样不管k是不是大于LinkedList的长度都这么算。

重新连接链表的题目,肯定要找到这个要操作的node的之前的那个node。因为这个prenode之后会变成tail,所以要把rotateNode,也就是newHead保存一下,不能在这里就让preNode.next = null。这样就改变了原先的链表,后面的node的找不到了,之后的操作都会发生nullpointerExxceptions。

再找到整个链表的最后一个Node,为了让这个lastNode和原本的head接起来。

接好之后不要忘记把preNode.next = null,否则整个链表是个环

如果用slow, fast那种方法,找pre和last只要遍历一遍就可以了。

代码

public ListNode rotateRight(ListNode head, int k) {
    //corner case
    if(head == null || head.next == null) return head;
    int len = getLen(head);
    //if k == len, the list wont' reverse
    int n = k % len;
    if(n == 0) return head;
    
    ListNode dummy = new ListNode(0);
    
    dummy.next = head;
    ListNode pre = dummy;
    ListNode last = dummy;
    //find the node pre the rotate node
    for(int i = 0; i < len - n; i++){
        pre = pre.next;
    }
    ListNode rotateNode = pre.next;
    
    //find the last node
    for(int i = 0; i < len; i++){
        last = last.next;
    }
    last.next = head;
    pre.next = null;
    return rotateNode;
}

http://www.niftyadmin.cn/n/2496180.html

相关文章

mysql profiling_MySQL profiling使用

Mysql SQL优化工具我们常使用explain去解析sql的执行&#xff0c;根据执行计划去评估sql的性能消耗瓶颈&#xff0c;而MYSQL Profiling提供我们详细的SQL执行过程中的cpu/io/swap/memory等使用情况以及每个过程执行时间消耗。主要用途为1&#xff1a;查看SQL执行消耗瓶颈位置2、…

关于PDF展示解决方案

三种解决方案:1.使用UIWebView2.使用QLPreviewController不支持http scheme URL,必须先将pdf文件下载到本地,然后在进行加载.3.使用CGContextDrawPage转载于:https://www.cnblogs.com/Sunnyheart/p/5364835.html

mysql必知必会目录_《MySQL必知必会》目录介绍

《MySQL必知必会》目录介绍目  录第1章 了解SQL... 11.1 数据库基础..... 11.1.1 什么是数据库..... 21.1.2 表..... 21.1.3 列和数据类型..... 31.1.4 行..... 41.1.5 主键..... 41.2 什么是SQL... 51.3 动手实践..... 61.4 小结..... 7第2章 MySQL简介...... 82…

swift基础知识

let 声明常量var 声明变量 ?可以为空 &#xff01;必须为所声明类型 swift中文教程&#xff1a;http://c.biancheng.net/cpp/swift/jiaocheng/转载于:https://www.cnblogs.com/to-creat/p/5368033.html

python io编程

1.IO编程IO在计算机中指Input/Output&#xff0c;也就是输入和输出。由于程序和运行时数据是在内存中驻留&#xff0c;由CPU这个超快的计算核心来执行&#xff0c;涉及到数据交换的地方&#xff0c;通常是磁盘、网络等&#xff0c;就需要IO接口。比如你打开浏览器&#xff0c;访…

liunx 每天自动备份mysql数据库_Linux下每天自动备份mysql数据库

/usr/bin为mysql安装目录建备份文件夹&#xff1a;mkdir mysql_data_bak建脚本文件&#xff1a;touch autobackupmysql.sh打开文件vi autobackupmysql.sh在脚本中加入如下内容&#xff1a;filenamedate %Y%m%d/usr/bin/mysqldump -opt mysql -u root -proot|gzip >/mysql_d…

2017-05-26

2019独角兽企业重金招聘Python工程师标准>>> 1.缓存Cache1.1.操作系统磁盘缓存(减少磁盘机械操作)1.2.数据库缓存(减少文件系统I/0)1.3.应用程序缓存(减少对数据库的查询)1.4.Web服务器缓存(减少应用服务器请求)1.5.客户端浏览器缓存(减少对网站的访问)2.缓存一般需…

mysql和运维_数据库服务运维(Sql与Mysql)

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;1 安装ubuntu&#xff0c;我们可以使用 apt 安装 MySQL。该命令会安装 MySQL 服务器&#xff0c;客户端和一些其它的组件。命令如下&#xff1a;# 在安装 mysql-server 的时候 mysql-client 与 mysql-comman 会推荐…