个人记录-LeetCode 92. Reverse Linked List II
2017-02-23 20:25
423 查看
问题:
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; } }
相关文章推荐
- leetCode 92.Reverse Linked List II (反转链表II) 解题思路和方法
- Leetcode 92. Reverse Linked List II
- 【Leetcode】92. Reverse Linked List II && 206. Reverse Linked List
- Leetcode 92. Reverse Linked List II
- Leetcode 92. Reverse Linked List II 翻转链表2 解题报告
- [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 解法及注释
- 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
- 【leetcode】92. Reverse Linked List II