92. Reverse Linked List II
2017-04-03 22:54
288 查看
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given
return
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
Solution:
Tips:
locate to the two elements, and use head inserting to deal the elements.
Java Code:
/**
* 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 (m == n || head == null) {
return head;
}
int k = n - m;
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode mPointer = head;
ListNode nPointer = head;
ListNode mPrevPointer = newHead;
while (k-- > 0) {
n--;
nPointer = nPointer.next;
}
while (--n > 0) {
nPointer = nPointer.next;
mPointer = mPointer.next;
mPrevPointer = mPrevPointer.next;
}
// mPrevPointer head insert
nPointer = nPointer.next;
mPrevPointer.next = nPointer;
while (mPointer != null && mPointer != nPointer) {
ListNode node = mPointer;
mPointer = mPointer.next;
node.next = mPrevPointer.next;
mPrevPointer.next = node;
}
return newHead.next;
}
}
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.
Solution:
Tips:
locate to the two elements, and use head inserting to deal the elements.
Java Code:
/**
* 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 (m == n || head == null) {
return head;
}
int k = n - m;
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode mPointer = head;
ListNode nPointer = head;
ListNode mPrevPointer = newHead;
while (k-- > 0) {
n--;
nPointer = nPointer.next;
}
while (--n > 0) {
nPointer = nPointer.next;
mPointer = mPointer.next;
mPrevPointer = mPrevPointer.next;
}
// mPrevPointer head insert
nPointer = nPointer.next;
mPrevPointer.next = nPointer;
while (mPointer != null && mPointer != nPointer) {
ListNode node = mPointer;
mPointer = mPointer.next;
node.next = mPrevPointer.next;
mPrevPointer.next = node;
}
return newHead.next;
}
}
相关文章推荐
- 92. Reverse Linked List II
- [LeetCode] 92. Reverse Linked List II
- 92. Reverse Linked List II
- leetcode之92. Reverse Linked List II(C++读错题版本,交换一个链表中指定的两个位置上的元素)
- 【leetcode】92. Reverse Linked List II
- 92. Reverse Linked List II
- LeetCode OJ 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 (Medium) (cpp)
- leetcode92. Reverse Linked List II
- leetcode题解-92. Reverse Linked List II
- [leetcode] 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II**
- (Leetcode)92. Reverse Linked List II ——反转单链表
- Leetcode 92. Reverse Linked List II
- Leetcode 92. Reverse Linked List II 翻转链表2 解题报告