您的位置:首页 > 其它

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
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息