首页 > 其他分享 >[LeetCode] LeetCode92. 反转链表II

[LeetCode] LeetCode92. 反转链表II

时间:2023-12-13 09:36:35浏览次数:37  
标签:II ListNode cur int LeetCode92 next 链表 节点 left

题目描述

思路:同LeetCode25. K个一组翻转链表

  1. 因为涉及到可能链表的头节点会改变,所以设置dummy节点
  2. 先走left - 1步到达left的左边一个节点
  3. 查看后面是否存在right - left + 1个节点
  4. 先翻转内部节点指向right - left次
  5. 再翻转外部节点

方法一:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseBetween(ListNode head, int left, int right) {
        // 因为涉及到可能链表的头节点会改变,所以设置dummy节点
		ListNode dummy = new ListNode(0, head);
        ListNode cur = dummy;
        // 先走left - 1步到达left的左边一个节点
		for (int i = 0; i < left - 1; i ++) {
            cur = cur.next;
        }
		// 查看后面是否存在right - left + 1个节点
        ListNode p = cur;
        for (int i = 0; i < right - left + 1 && p != null; i ++) {
            p = p.next;
        } 
        if (p == null) return null;
        ListNode node1 = cur.next;
        ListNode node2 = cur.next.next;
		// 先翻转内部节点指向right - left次
        for (int i = 0; i < right - left; i ++) {
            ListNode temp = node2.next;
            node2.next = node1;
            node1 = node2;
            node2 = temp;
        }
		// 再翻转外部节点
        ListNode temp = cur.next;
        cur.next = node1;
        temp.next = node2;
        return dummy.next;
    }
}

标签:II,ListNode,cur,int,LeetCode92,next,链表,节点,left
From: https://www.cnblogs.com/keyongkang/p/17898310.html

相关文章

  • [刷题技巧] 链表刷题技巧汇总
    链表的算法题中很常见的技巧:添加虚拟头结点,即dummy结点。当需要创造一条新链表的时候,可以使用虚拟头节点简化边界情况的处理。例如:LeetCode21.合并两个有序链表,让两条有序链表合并成一条新的有序链表,需要创造一条新的链表。例如,LeetCode86.分隔链表,把一条链表分解成两条链......
  • 如何判断链表是否存在环?
    大家好,今天我们来聊一聊如何判断链表是否存在环。如果你是一个链表的小白,听到“环”这个词可能会感到一头雾水。别担心,我会用通俗易懂的语言来解释这个问题,并带大家看一段代码演示。首先,我们要了解什么是链表。链表是一种数据结构,由一系列节点组成,每个节点都有一个值和一个指向下一......
  • 【常见问题】Python报错SyntaxError: Non-ASCII character '\\xe7' in file
    错误原因:windows默认编码格式是GBK,macOS,linux是utf-8。当使用windows且代码内有GBK不支持的字符集的时候,就会报错。解决方法:方法一在python文件的顶部加上编码格式#-*-coding:utf-8-*-方法二在python3.7以及之后,使用utf-8模式https://peps.python.org/pep-0540/pyt......
  • 113. 路径总和 II(中)
    目录题目题解:回溯题目给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。题解:回溯classSolution:defpathSum(self,root:Optional[TreeNode],targetSum:int)->List[List[int]]:res=[......
  • [LeetCode Hot 100] LeetCode24. 两两交换链表中的节点
    题目描述思路:创建dummy节点,令dummy.next=head。令cur表示当前到达的节点,初始时cur=dummy。每次需要交换cur后面的两个节点。如果cur的后面没有节点或者只有一个节点,则没有更多的节点需要交换,因此结束交换。否则,获得cur后面的两个节点node1和node2,通过更新节点的指针关系......
  • [LeetCode Hot 100] LeetCode148. 排序链表
    题目描述思路一:堆排序、小顶堆定义一个最小堆将链表的所有节点放入一个最小堆中直接用队列弹出的最小值依次覆盖掉原链表的值方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}......
  • [LeetCode Hot 100] LeetCode138. 随机链表的复制
    题目描述思路一:添加"小弟"根据遍历到的原节点创建对应的新节点,每个新创建的节点是在原节点后面。原节点i的随机指针(如果有的话),指向的是原节点j,那么新节点i的随机指针,指向的是原节点j的next最后将两个链表分开,再返回新链表就可以思路二:使用哈希表首先创建一个哈希表......
  • [LeetCode Hot 100] LeetCode25. K个一组翻转链表
    题目描述思路:判断链表中是否足够k个元素再将这k个元素内部翻转一下将前后端点连接的指针变化一下方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval)......
  • ASCII编码
    一、ASCII编码简介ASCII(AmericanStandardCodeforInformationInterchange,美国标准信息交换代码)是一种基于拉丁字母的电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,涵盖了128个字符。Ascii编码解码--一个覆盖广泛主题工具的高效在线......
  • [持续更新][数据结构][算法]涵盖线性表、栈、链表、队列、图、动态规划、分治递归、回
    备考考点整理内部排序表格树的主要考点二叉树的常考紧紧抓住\(n_0=n_2+1\)\(n=n_0+n_1+n_2...n_m\)\(n=n_1+2*n_2+3*n_3...m*n_m\)+1哈夫曼树没有度为1的结点,也就是\(n_1=0\)完全二叉树常考总结最大岛屿问题(dfs模板)#include<iostream>#include<algorith......