leetcode:92. 反转链表 II(C++)

简介: 目录题目解题步骤代码题目给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

目录

题目

解题步骤

代码


题目

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

示例1

image.png

输入:head = [1,2,3,4,5], left = 2, right = 4

输出:[1,4,3,2,5]

示例 2


输入:head = [5], left = 1, right = 1

输出:[5]

解题步骤

1、找到开始逆置的结点,记录该结点的前驱

image.png

2、从head开始逆置cheng_len = right - left + 1

image.png

3、将pre_head 与new_head连接,moditify_head与head连接

image.png


代码:

class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        int cheng_len = right - left  + 1;
        ListNode *pre_head = NULL;
        ListNode *result = head;
        //求开始逆置的结点记录该节点的前驱
        while(head && --left)
        {
            pre_head = head;         
            head = head->next;
        }
        ListNode *modify_list_tail = head;  //指向当前的head,及逆置后的链表尾
        ListNode *new_head;
        while(head && cheng_len)           //逆序过程
        {
            ListNode *next = head->next;
            head->next = new_head;
            new_head = head;
            head = next;
            cheng_len--;
        }
        modify_list_tail->next = head;
        if(pre_head)
        {
             pre_head->next = new_head;
        }
        else {                         //说明m从第一个结点开始逆置
            result = new_head;
        }
        return result;
    }
};


相关文章
|
3月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
42 1
|
3月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
56 0
Leetcode第21题(合并两个有序链表)
|
3月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
31 0
LeetCode第二十四题(两两交换链表中的节点)
|
3月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
48 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
3月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
107 0
|
3月前
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
25 0
|
3月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
21 0
|
3月前
【LeetCode 08】206 反转链表
【LeetCode 08】206 反转链表
14 0
|
3月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
36 0
|
5月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点