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

链表内指定区间反转

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

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */

#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <linux/limits.h>
class Solution {
  public:
    /**
     *
     * @param head ListNode类
     * @param m int整型
     * @param n int整型
     * @return ListNode类
     */
    
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        if (head == nullptr ) return nullptr;
	  //创建一个虚拟头结点,方便返回head(可能会修改head的指向)
        auto virhead = new ListNode(MAX_INPUT);
        virhead->next = head;
        ListNode* p = virhead;
        int pos = 0;
        //找到m的前驱
        while (p != nullptr && pos != m - 1) 
        {
            p = p->next;
            ++pos;
        }
        //找到n结点的下一个
        pos = 0;
        ListNode* q = p;
	  //n-m+2 q为m的前驱,到n的下一个,所以+2
        while(q != nullptr && pos != n-m+2)
        {
            q = q->next;
            ++pos;           
        }
        //反转m到n
        ListNode* temp = p->next;
        ListNode* tempnext;
        p->next = q;
        while(temp != q)
        {
            tempnext = temp->next;
            temp->next = p->next;
            p->next = temp;
            temp = tempnext;
        }
        p = virhead->next;
	  //销毁虚拟头结点
        delete (virhead);
        return p;


    }
};

全部评论

相关推荐

机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
07-02 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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