个人记录-LeetCode 92. Reverse Linked List II
来源:互联网 发布:网址域名能换吗 编辑:程序博客网 时间:2024/06/05 03:49
问题:
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->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
代码示例:
问题要求,逆向重排m~n之间的节点。
主要思路:
1、改变m~n之间next的指向,
即将a->b->c,变为a<-b<-c;
2、让m-1指向节点n,m指向n+1
代码如下:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { //m、n一致时,不需要改变 if (m == n) { return head; } //记录m-1和m的位置 ListNode beforeM = null; ListNode nodeM = null; //记录n和n+1的位置 ListNode afterN = null; ListNode nodeN = null; //记录位置 int count = 0; ListNode tmp = head; //记录m~n中每个节点的前一个位置 ListNode before = null; while (tmp != null) { ++count; //记录m-1的信息 if (count == m - 1) { beforeM = tmp; tmp = tmp.next; } else if (count == m) { //记录m的信息 nodeM = tmp; //从m+1开始,需要使用before信息 before = tmp; tmp = tmp.next; } else if (count > m && count < n) { //m~n之间,改变节点next的指向 ListNode next = tmp.next; tmp.next = before; before = tmp; tmp = next; } else if (count == n) { //记录n和n+1的信息 nodeN = tmp; afterN = nodeN.next; nodeN.next = before; //后面的不用管了 break; } else { //0~m-1之间时,正常移动即可 tmp = tmp.next; } } //m-1指向n if (beforeM != null) { beforeM.next = nodeN; } else { //m为第一个节点时,逆向后n为头节点 head = nodeN; } //按题目的条件,m不会为null,next指向n+1 if (nodeM != null) { nodeM.next = afterN; } return head; }}
0 0
- 个人记录-LeetCode 92. Reverse Linked List II
- [LeetCode]206. Reverse Linked List&92. Reverse Linked List II
- LeetCode 206. Reverse Linked List && 92. Reverse Linked List II
- 92. Reverse Linked List II leetcode list
- [LeetCode]92.Reverse Linked List II
- LeetCode 92. Reverse Linked List II
- [Leetcode] 92. Reverse Linked List II
- LeetCode --- 92. Reverse Linked List II
- [leetcode] 92.Reverse Linked List II
- [leetcode] 92. Reverse Linked List II
- 92. Reverse Linked List II LeetCode
- leetcode 92. Reverse Linked List II
- Leetcode 92. Reverse Linked List II
- LeetCode 92. Reverse Linked List II
- [LeetCode] 92. Reverse Linked List II
- LeetCode *** 92. Reverse Linked List II
- Leetcode 92. Reverse Linked List II
- [Leetcode] 92. Reverse Linked List II
- 为什么服务器大多使用Linux?
- Linux系统如何标识进程?
- PCL 构造一个绕任意轴旋转的变换矩阵
- 【python】系列简记--00:写在前面
- 萌新SQL基础学习1---续2
- 个人记录-LeetCode 92. Reverse Linked List II
- 关于行为类的设计模式之策略模式的总结
- 【hdoj_2570】迷障
- springmvc中拦截器,HandlerInterceptor接口的三个方法分别在什么时候拦截
- Lesson2 软件测试之测试理论概述(1)
- Sift特征
- GRUB2配置文件"grub.cfg"详解(GRUB2实战手册)
- Activity启动模式详解及其易用场景
- 面向对象编程之成员函数