题目描述
Reverse a linked list from position m to n. Do it in one-pass.
Note: 1 ≤ m ≤ n ≤ length of list.
Example:
Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL
core code
prev->next=cur->next;
cur->next=head2->next;
head2->next=cur;
cur=prev->next;
这个地方比较绕,可以画图理解下,三个一组,画一下链表的方向
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode dummy(-1);
dummy.next=head;
ListNode *prev=&dummy;
for(int i=0;i<m-1;++i){
prev=prev->next;
}
ListNode* const head2=prev;
prev=head2->next;
ListNode *cur=prev->next;
for(int i=m;i<n;++i){
//实现元素的反转,同时在改变指针的方向时,同时将head-next指向最后一个元素,m后面的元素指向head ->next,在链表换向的同时将局部的元素的开始跟最后的元素的下一个指向进行指定
prev->next=cur->next;
cur->next=head2->next;
head2->next=cur;
cur=prev->next;
}
return dummy.next;
}
};