题解 | #链表内指定区间反转#

链表内指定区间反转

https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c

#include <iostream>
using namespace std;

class Solution {
  public:
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        ListNode* pre, *cur, *dummy;
        dummy = new ListNode(0);
        dummy->next = head;
        pre = dummy;
        cur = head;
        for (int i = 1; i < m; i++) {
            pre = pre->next;
            cur = cur->next;
        }// pre , cur
        for (int i = m; i < n; i++) {
            ListNode* tmp = cur->next;
            cur->next =
                tmp->next; //因为tmp要往前抽,所以cur->next 跳过tmp 变成tmp->next
            tmp->next =
                pre->next; //这里pre是定死的,所以每次都是把后面的往前抽,直到cur->next 是最后一个元素,也就是i=n-1时
            pre->next = tmp; //把tmp抽到最前面
        }
        return dummy->next;
    }
};

#我的实习求职记录#
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务