Leetcode Reverse Linked List II
2016-07-29 05:22
429 查看
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given
return
Diffiiculty: Medium
/**
* 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 || m == n) return head;
ListNode pre = new ListNode(0);
ListNode beforeHead = pre;
pre.next = head;
ListNode currHead = head;
for(int i = 0; i < m - 1; i++){
currHead = currHead.next;
pre = pre.next;
}
ListNode currTail = currHead;
ListNode next = currTail.next;
for(int i = 0; i < n - m; i++){
currTail = currTail.next;
next = next.next;
}
ListNode curr = currHead;
ListNode curr_next = curr.next;
for(int i = 0; i < n - m; i++){
ListNode temp = curr_next.next;
curr_next.next = curr;
curr = curr_next;
curr_next = temp;
}
pre.next = currTail;
currHead.next = next;
return beforeHead.next;
}
}
For example:
Given
1->2->3->4->5->NULL, m = 2 and n = 4,
return
1->4->3->2->5->NULL.
Diffiiculty: Medium
/**
* 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 || m == n) return head;
ListNode pre = new ListNode(0);
ListNode beforeHead = pre;
pre.next = head;
ListNode currHead = head;
for(int i = 0; i < m - 1; i++){
currHead = currHead.next;
pre = pre.next;
}
ListNode currTail = currHead;
ListNode next = currTail.next;
for(int i = 0; i < n - m; i++){
currTail = currTail.next;
next = next.next;
}
ListNode curr = currHead;
ListNode curr_next = curr.next;
for(int i = 0; i < n - m; i++){
ListNode temp = curr_next.next;
curr_next.next = curr;
curr = curr_next;
curr_next = temp;
}
pre.next = currTail;
currHead.next = next;
return beforeHead.next;
}
}
相关文章推荐
- 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