92. Reverse Linked List II

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

含义:翻转列表中给定的两个节点间的所有节点

思路:这道题是比较常见的链表反转操作,不过不是反转整个链表,而是从m到n的一部分。分为两个步骤,第一步是找到m结点所在位置,第二步就是进行反转直到n结点。反转的方法就是每读到一个结点,把它插入到m结点前面位置,然后m结点接到读到结点的下一个。总共只需要一次扫描,所以时间是O(n),只需要几个辅助指针,空间是O(1)

复制代码
 1         if(head == null)return null;
 2         ListNode dummy = new ListNode(0);
 3         dummy.next = head;
 4         ListNode preNode = dummy;
 5         int i=1;
 6         while(preNode.next!=null && i<m)
 7         {
 8             preNode = preNode.next;
 9             i++;
10         }
11         if(i<m) return head;
12         ListNode mNode = preNode.next;
13         ListNode cur = mNode.next;
14         while(cur!=null && i<n)
15         {
16             ListNode next = cur.next;
17             cur.next = preNode.next;
18             preNode.next = cur;
19             mNode.next = next;
20             cur = next;
21             i++;
22         }
23         return dummy.next;
复制代码

 

类似题目:206. Reverse Linked List

posted @   daniel456  阅读(83)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示