您的位置:首页 > 其它

leetcode -- Reverse Linked List II

2013-08-16 20:43 459 查看
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.

[解题思路]

添加一个safeguard,防止处理m=1的情况,用p1, p2, p3记录m-1, m, n这几个节点的引用

当处理到m+1~n这些节点时将,将它们的next指向前一个节点

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) {
*         val = x;
*         next = null;
*     }
* }
*/
public class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
// Start typing your Java solution below
// DO NOT write main() function
if(head == null || m == n){
return head;
}

ListNode fake = new ListNode(Integer.MIN_VALUE);
fake.next = head;
head = fake;

int count = 0;
ListNode pre = null, p = head, p1 = null, p2 = null, p3 = null;
while(count <= n){
if(count == m - 1){
p1 = p;
} else if(count == m){
p2 = p;
} else if(count == n){
p3 = p;
}
ListNode tmp = p.next;
if(count >= m + 1 && count <= n){
p.next = pre;
}
pre = p;
p = tmp;
count++;
}
p1.next = p3;
p2.next = p;
return head.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: