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.
解题思路:
1. reverse linkedlist,通常需要2个指针和一个temp 指针。这里最后要将reversedlist和原来的list链接起来,所以我们还需要一个指针来存储m-1的node。
2. 这里会考虑到m == 1的情况,所以我们加一个dummy node
Java Code:
public ListNode reverseBetween(ListNode head, int m, int n) {
ListNode p = head;
ListNode safehead = new ListNode(0);
safehead.next = head;
ListNode prevM = safehead;
ListNode prev = null;
int i = 1;
while( p != null && i <= n){
if(i >= m){
ListNode tmp = p;
p = p.next;
tmp.next = prev;
prev = tmp;
}else{
prevM = prevM.next;
p = p.next;
}
i++;
}
prevM.next.next = p;
prevM.next = prev;
return safehead.next;
}
No comments:
Post a Comment