首页 > 其他分享 >[leetcode 92] 反转链表 II

[leetcode 92] 反转链表 II

时间:2024-10-04 11:22:45浏览次数:10  
标签:II p0 ListNode cur 反转 next 链表 92

题目描述:

https://leetcode.cn/problems/reverse-linked-list-ii

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

 

示例 1:

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

示例 2:

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

 

提示:

  • 链表中节点数目为 n
  • 1 <= n <= 500
  • -500 <= Node.val <= 500
  • 1 <= left <= right <= n

 

进阶: 你可以使用一趟扫描完成反转吗?

解题思路:

https://www.bilibili.com/video/BV1sd4y1x7KN(视频讲解)

 假设要反转链表中的节点2,3,4

  首先,反转之后,从原链表(图中第二条链表蓝色和黑色部分)来看,反转段的上一个节点为p0,反转段的头节点为pre,反转段的后一个节点为cur

 然后,处理反转段的前面和后面节点(图中粉色部分)

 

代码(C++/Python):

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:

        # 使用dummy防止left节点是链表头结点,简化代码逻辑
        dummy=ListNode(next=head)
        p0=dummy

        #p0指向反转链表段的前一个节点
        for _ in range(left-1):
            p0=p0.next
        
        pre=None
        cur=p0.next

        # 反转链表
        for _ in range(right-left+1):
            nxt=cur.next
            cur.next=pre
            pre=cur
            cur=nxt

        # 处理反转段的前后结点
        p0.next.next=cur
        p0.next=pre

        return dummy.next
/**
 * 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 dummy(0,head);
       ListNode* p0=&dummy;
       
       for(int i=0;i<left-1;i++){
            p0=p0->next;
       }

       ListNode* cur=p0->next;
       ListNode* pre=nullptr;
       ListNode* nxt=nullptr;

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

       p0->next->next=cur;
       p0->next=pre;
       
       return dummy.next;

 

解题总结:

注意,反转后的链表段,从原链表上看其前后节点的位置。

标签:II,p0,ListNode,cur,反转,next,链表,92
From: https://www.cnblogs.com/Makerr/p/18446441

相关文章

  • 2024-1-16 三年总结 192623
    三年总结因果有关于感情,似乎不知从何说起,但是可以肯定的是有因果安排。这份因果一则还债,二则让我领悟一些道理。其中除了需要学会判断之外,还需要明白色即是空,也即放下执着,但并不仅限于爱情。对于一般人而言,必须要找一个活下去的意义,在世界上如果没有自己存在的价值,或者说优越感......
  • CPSC 219: Introduction to Computer Science II
    CPSC219:IntroductiontoComputerScienceIIAssignment1:ProceduralJava–SnakeGameCourse:CPSC233S24DueDate:Friday,Sept.27,2024Version:1.1.1Weight:10%Objective:WriteaJavaprogramwithastandardproceduralstructureandsavetheworkto......
  • 算法训练营第七天| 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字
    344.反转字符串状态:成功完成。初始思路:双指针交换位置就可以,如果元素个数为偶数,则刚好交换完最后一组后,left>right;如果元素个数为奇数,交换完最后一组后,left和right同时到达中位数,不需要交换。 541.反转字符串II 状态:没做出来。初始思路:这道题是以上一个题目为基础的,我......
  • 代码随想录算法训练营 | 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II,1005.K次
    122.买卖股票的最佳时机II题目链接:122.买卖股票的最佳时机II文档讲解︰代码随想录(programmercarl.com)视频讲解︰买卖股票的最佳时机II日期:2024-10-03想法:本来还在想什么时候买股票,结果只需要考虑每天的正收益累加就是最大的收益了。Java代码如下:classSolution{public......
  • 20240920
    TryandCry我们肯定是尽可能的让前\((n-1)\)个多拿,但是有可能这个有一些一样的,所以向上取整即可#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e6+5;intt,n;voidSolve(){cin>>n;inttmp=((n*(n-1)/......
  • 题解:P9939 [USACO21OPEN] Acowdemia III B
    考虑贪心。遍历每只奶牛:如果它最多与一头奶牛相邻,那么什么都不会发生。如果它与两头以上的奶牛相邻,那么它与两侧的两头奶牛相邻。将答案递增\(1\)。否则,如果正好有两头相邻的奶牛,我们就把它们配对。也就是说,将这对奶牛插入一组。代码:#include<bits/stdc++.h>usingname......
  • 代码随想录算法训练营 | 491.递增子序列,46.全排列,47.全排列 II
    491.递增子序列题目链接:491.递增子序列文档讲解︰代码随想录(programmercarl.com)视频讲解︰491.递增子序列日期:2024-10-02想法:根据题目nums[i]的范围在-100到100,可以用数组做记录是否同一层使用过Java代码如下:classSolution{List<Integer>path=newArrayList<>();......
  • Leetcode 275. H 指数 II
    1.题目基本信息1.1.题目描述给你一个整数数组citations,其中citations[i]表示研究者的第i篇论文被引用的次数,citations已经按照升序排列。计算并返回该研究者的h指数。h指数的定义:h代表“高引用次数”(highcitations),一名科研人员的h指数是指他(她)的(n篇论文中)至......
  • YC342A [ 20240922 CQYC NOIP 模拟赛 T1 ] 前缀(lcp)
    题意给定\(n,m\)以及长为\(n\)的字符串\(S\)。你需要构造字符串\(T\)使得\(\sumLCP(S,T[i,...,m])\)最大。求出这个最大值。\(n,m\le5\times10^3\)。Sol首先不难发现答案一定可以由若干\(S\)的前缀拼成。考虑找到最小的无法被拆为前缀的子段,显然这个......
  • PbootCMS附件上传失败报错UNKNOW: Code: 8192; Desc: stripos(): Non-string needles
    当遇到PBootCMS附件上传失败,并报错 UNKNOW:Code:8192;Desc:stripos():Non-stringneedleswillbeinterpretedasstringsinthefuture. 时,这通常是因为PHP的版本更新导致某些函数的行为有所改变。在这个情况下,stripos() 函数在处理非字符串参数时会发出警告,因为它......