LeetCode - 92、反转链表 II】的更多相关文章

92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. LeetCode92. Reverse Linked List II中等 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL Java 实现 public class ListNo…
92. 反转链表 II 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 通过次数33,953提交次数69,208 PS: 实现思路 :以1->2->3->4->5, m = 2, n=4 为例: 定位到要反转部分的头节点 2,head =…
1. 题目 2. 解答 我们需要先找到第 m 个结点及其上一个结点,然后将从 m 到 n 的结点进行反转,最后依次将 m 到 n 反转后的结点和 n 之后的结点放入原链表中即可. 从前往后依次遍历 m-1 次即可找到第 m 个结点,然后我们开始将第 m 到第 n 个结点倒序放入一个新链表,也即每次都在新链表的头结点后面进行插入,来实现这部分子链表的反转. 最后,我们将这个反转后的子链表放入原链表,再把第 n 个结点后面的链表也放回到原链表即可. /** * Definition for sing…
题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 解题思路 本题类似于反转链表的做法,但不同的是只反转中间的一段节点,所以在反转完一段链表后,应重新拼接到原链表对应位置中间.具体步骤为: 首先找到反转链表的首尾节点,若首节点不是链表头结点,还要同时保存首节…
题目链接 : https://leetcode-cn.com/problems/reverse-linked-list-ii/ 题目描述: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 思路: 思路一: 找到要翻转部分的链表,将其翻转,再与原链表拼接; 直接看代…
206. 反转链表 问题描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表.你能否用两种方法解决这道题? 问题分析 开始我们定义一个虚拟的头结点a,他的下一个节点为head.假设我们到了某一步已经反转了一些元素:a->[], b->c->d->...,其中[]中是已经反转好的元素,b->c->d-&g…
题目 给你单链表的头指针 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…
目录 题目 思路1(迭代) 代码 复杂度分析 思路2(递归) 代码 复杂度分析 题目 92. 反转链表 II 思路1(迭代) 将反转链表分成3个部分:前一段未反转的部分.待反转链表部分.后一段未反转部分 将3个片段分离后,然后再连接起来 细节注意:如果是从第一个开始反转链表,即前一段未反转的部分不存在,那么返回的结果就直接是反转链表片段的新节点,否则就是head 代码 class Solution { public ListNode reverseBetween(ListNode head, i…
92.反转链表 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 详解见图: public class Solution { public class ListNode { int val; ListNode next; ListNode(int x) { val =…
解题思路 将链表分为三部分:[0, m).[m, n].(n, L],其中 L 为链表长度. 第一步:使用虚拟头节点 dummy,用于将 head 也能参与操作: 第二步:找到第 m-1 节点(firstHalfEnd),用于连接反转后的第二部分链表: 第三步:遍历[m, n],进行链表反转.注意在反转前要保存待反转链表区间的第一个节点,用于连接第三部分链表: 第四步: firstHalfEnd.next = pre; // 此时的 pre 指向反转后的链表区间的第一个节点 secondHalf…