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

链表内指定区间反转

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

#include <unistd.h>
class Solution {
  public:
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        
        ListNode* qq = head;
        ListNode* q = head;
        ListNode* pre = head;
        ListNode* ppre = head;

        for (int i = 0; i < m - 2; ++i)
            qq = qq->next;
        for (int i = 0; i < m - 1; ++i)
            q = q->next;
        for (int i = 0; i < n -1; ++i)
            pre = pre->next;
        for (int i = 0; i < n ; ++i)
            ppre = ppre->next;

        ListNode* x=q;
        ListNode* y=q;
        ListNode* cur=q->next;
        while(cur!=ppre)
        {
            y=cur;
            cur=y->next;
            y->next=x;
            x=y;
        }
        qq->next=pre;
        q->next=ppre;
        if(m==1)
        return x;  
        return head;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务