Leetcode92. 反转链表 II

Posted _Karry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode92. 反转链表 II相关的知识,希望对你有一定的参考价值。

题目描述

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表
在这里插入图片描述

代码

/**
 * 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* reverseBetween(ListNode* head, int left, int right) {
        ListNode *result = head;
        int change_num = right - left + 1;

        ListNode *pre_head = nullptr;
        while(head && --left){
            pre_head = head;
            head = head->next;
        }
        ListNode *new_tail = head;      //记录反转之后的尾节点,为了与后面的数据连接

        ListNode *new_head = nullptr;   //反转之后的新头节点
        while(head && change_num--){
            ListNode *next = head->next;
            head->next = new_head;
            new_head = head;
            head = next;
        }

        new_tail->next = head;          //反转之后的链表与后面的数据连接

        //反转之后的链表与前面的数据连接,需要判断是否从第一个节点就开始反转了
        if(pre_head){           
            pre_head->next = new_head;
        }
        else{
            result = new_head;
        }

        return result;
    }
};

以上是关于Leetcode92. 反转链表 II的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode92. 反转链表 II

Leetcode92. 反转链表 II

Leetcode92. 反转链表 II(JAVA头插法)

头插法LeetCode 92. 反转链表 II

leetcode 92. 反转链表 II

LeetCode——92. 反转链表 II