[LeetCode]Reverse Linked List II
2014-05-29 17:55
274 查看
题目描述
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-1个点,2.第m个点,3.第n个点,4.第n+1个点;将其中的[m,n]段逆转,需要注意当m为1时的情况。
代码
public static ListNode reverseBetween(ListNode head, int m, int n) { ListNode beforeMthNode = null; ListNode tailBetweenNode = null; ListNode headBetweenNode = null; ListNode loopNode = head; ListNode preNode = null, followNode = null; ListNode newHead = head; // [1,m-1]段 for (int i = 1; i < m && loopNode != null; i++) { beforeMthNode = loopNode; loopNode = loopNode.next; } // 第m个节点 tailBetweenNode = loopNode; // 逆转[m,n]段 for (int i = m; i <= n && loopNode != null; i++) { preNode = loopNode; loopNode = loopNode.next; preNode.next = followNode; followNode = preNode; } // [m,n]段逆转后的头节点 headBetweenNode = preNode; if (beforeMthNode == null) { // 如果m==1,则逆转段的头节点为新的头节点 newHead = headBetweenNode; } else { // 如果m!=1,则第m-1个节点指向逆转段的新的头节点 beforeMthNode.next = headBetweenNode; } // 逆转段的尾节点指向剩余的链表 tailBetweenNode.next = loopNode; return newHead; }
相关文章推荐
- leetcode 41: Reverse Linked List II
- leetcode 76: Reverse Linked List II
- [leetcode] Reverse Linked List II
- LeetCode_Reverse Linked List II
- LeetCode-Reverse Linked List II
- leetcode 41: Reverse Linked List II
- LeetCode:Reverse Linked List II
- LeetCode Online Judge 题目C# 练习 - Reverse Linked List II
- leetcode -- Reverse Linked List II
- [Leetcode]Reverse Linked List II
- [LeetCode] Reverse Linked List II
- [LeetCode] Reverse Linked List II 解题报告
- [Leetcode] Reverse Linked List II
- leetcode--Reverse Linked List II
- [LeetCode]Reverse Linked List II
- leetcode 76: Reverse Linked List II
- LeetCode —— Reverse Linked List II
- [leetcode]Reverse Linked List II
- [LeetCode] Reverse Linked List II
- LeetCode: Reverse Linked List II