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

链表内指定区间反转

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

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        // write code here
         ListNode* res = new ListNode(-1);
         res->next = head;
         ListNode* pre = res;
         ListNode* cur = head;
         for(int i=1;i<m;i++)
         {
            pre = cur;
            cur = cur->next;
         }

         for(int i=m;i<n;i++)
         {
            ListNode* temp = cur->next;
            cur->next = temp->next;
            temp->next = pre->next;
            pre->next = temp;
         }
         return res->next;
    }
    
};

1、每遍历一个就立刻反转一个。

2、pre在m大小确定后就不变了

3、切断cur和temp链接,cur链接到temp下一节点,temp链接到pre的下一节点(因为pre是不变的,保证pre下一节点就是最新的反转节点),pre链接到temp

全部评论

相关推荐

重生我想学测开:嵌入式的问题,我准备入行京东外卖了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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