Leetcode Reverse Linked List II 反转部分单向链表
2015-05-06 12:07
639 查看
题目:
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.
分析:
1. 链表可能从表头开始反转,因此需要dummy node。2. 先找到链表的第n个节点,即第一个需要反转的节点,为了之后指定部分整体反转,先记下它的前节点。
3. 对需要反转的部分进行反转。
4. 把2中记下的前节点的next更新成第m个节点,第n个节点的next更新为m+1个节点。反转完成。
Java代码实现:
/*** 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) {
if(head == null || head.next == null || m==n)
return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode pre = dummy;
for(int i=1;i<m;i++)
pre = pre.next;
ListNode node = pre.next;
ListNode next = node.next;
ListNode temp = new ListNode(0);
for(int i=m;i<n;i++)
{
temp = next.next;
next.next = node;
node = next;
next = temp;
}
pre.next.next = temp;
pre.next = node;
return dummy.next;
}
}
相关文章推荐
- Leetcode Reverse Linked List II 反转特定区间的链表
- leetCode 92.Reverse Linked List II (反转链表II) 解题思路和方法
- [leetcode]Reverse Linked List II (反转链表值 C语言实现)
- leetcode:Reverse Linked List II (反转链表中的一部分)【面试算法题】
- LeetCode-Reverse Linked List II(反转链表)
- [leetcode] Reverse Linked List II 链表反转
- leetcode——Reverse Linked List II 选择链表中部分节点逆序(AC)
- LeetCode-92-Reverse Linked List II 链表反转 各种边界条件
- (Leetcode)92. Reverse Linked List II ——反转单链表
- 【LeetCode-面试算法经典-Java实现】【092-Reverse Linked List II(反转单链表II)】
- [LeetCode-92] Reverse Linked List II(反转指定区间链表)
- leetcode206/92---Reverse Linked List I/II(反转链表)
- leetcode——Reverse Linked List II 选择链表中部分节点逆序(AC)
- C实现 LeetCode->Reverse Linked List II (双指针大法)(单链表反转)
- LeetCode2.2.2 @ Reverse Linked List II 反转链表II D3F2
- leetcode 92. Reverse Linked List II 反转链表 + 头插入反转链表(或者使用栈)
- [Leetcode] Reverse linked list ii 反转链表
- leetcode_92题——Reverse Linked List II(链表操作)
- Reverse Linked List II -- 翻转部分链表
- LeetCode OJ:Reverse Linked List II(反转链表II)