LeetCode 92. 反转链表 II

思路
将子链表切割下来并记录左节点前一个节点pre和右节点下一个节点sucess
反转子链表后,pre指向反转后的子链表,左节点(此时为子链表的尾节点指向sucess)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverse(ListNode* head) {
        ListNode* res = new ListNode(0);

        while (head) {
            ListNode* temp = head ->next;
            head ->next = res ->next;
            res ->next = head;
            head = temp;
        }

        return res -> next;
    }
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        ListNode* res = new ListNode(-1);
        res ->next = head;
        ListNode* leftNode;
        ListNode* rightNode;
        ListNode* cur = res;
        ListNode* pre;
        ListNode* success;

        for (int i = 0; i < left - 1; i++) {
            cur = cur ->next;
        }
        pre = cur;
        leftNode = pre ->next;


        for (int i = 0; i < right - left + 1; i ++) {
            cur = cur ->next;
        }
        rightNode = cur;
        success  = rightNode ->next;

        //分割
        ListNode* temp = new ListNode(0);
        temp ->next = leftNode;
        rightNode ->next = nullptr;

        ListNode* mid = reverse(leftNode);

        pre ->next = mid;
        leftNode ->next = success;

        return res ->next;


    }
};
posted @   hjy94wo  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示