Leetcode 92. 反转链表 II
题目
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
测试样例
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
题解
用一个指针ahead指向m的前一个节点,先找到第m个节点p,同时用after指向p->next,反转操作便是p->next = after->next,after->next = p1,p1永远指向这段区链表的头节点,之后更新p1,after。具体过程见代码
代码
ListNode* reverseBetween(ListNode* head, int m, int n) {
int cnt=1;
ListNode* ahead,*p,*after,*p1;
p = head;
ahead = head;
while(cnt != m){
ahead = p;
p = p->next;
cnt++;
}
if(p==NULL || p->next==NULL) return head;
after = p->next;
p1 = p;
while(cnt != n){
p->next = after->next;
after->next = p1;
p1 = after;
after=p->next;
cnt++;
}
if(p!=head) ahead->next = p1;
else head = p1;
return head;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。