第一步找中点的话,快慢指针。 第二步链表逆序的话,有迭代和递归的两种,迭代的话,主要是利用两个指针,依次逆转。 第三步,两个指针分别往后移动就可以了。 1/**2* Definition for singly-linked list.3* struct ListNode {4* int val;5* ListNode *next;6* ListNode() : val(0), next(nullptr) {}7*...
(1)找到链表的中间节点(2)将链表中间节点开始之后的链表逆置(3)将两个链表重新合并 (1)找链表的中间节点可以使用快慢指针来求出。快指针一次走两步,慢指针一次走一步。 (2)链表逆置,有两种方法,一种方法是使用三指针,一种方法是使用头插。 三指针法: (3)合并两个链表,合并链表,从两个链表的头节点开始链接。
(1)找到链表的中间节点 (2)将链表中间节点开始之后的链表逆置 (3)将两个链表重新合并 (1)找链表的中间节点可以使用快慢指针来求出。 快指针一次走两步,慢指针一次走一步。 (2)链表逆置,有两种方法,一种方法是使用三指针,一种方法是使用头插。 三指针法: (3)合并两个链表,合并链表,从两个链表的头节点开...
143. 重排链表 - 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 →…→ Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 →… 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: [htt
LeetCode 143. 重排链表(Reorder List) 题目描述 给定一个单链表L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为:L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例1: 给定链表 1->2->3->4, 重新排列为 1->4->2->3....
今天我们看一个比较适合面试的题,leetcode第143题,重排链表。说这题适合面试是因为本题可以拆解成 3 个比较基本的题,而拆解出来的子问题各自都是很经典的问题和方法。将子问题依次解决,在前后组合到一起,就成了本题的答案。在一个题中考察了多个题的算法要点,同时还考察了拆解问题的能力。 本题涉及到的三个子...
给定链表1->2->3->4->5,重新排列为1->5->2->4->3. 1. 实现思路 这个题目的一个思路就是: 首先使用快慢两个指针,获取链表的中点 从链表的中点断开,慢指针指向前半个链表,快指针指向后半个链表 将后半个链表进行翻转,让快指针重新指向翻转后的后半个链表 ...
给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3. 思路: 首先要找到链表的中点,可以使用两个指针,一个慢指针slow和一个快指针fast,慢指针和快指针的初始位置都在开头,慢指针一次走一步,快指针一次走两步,当快指针走到末尾,慢指针所在位置就是链表的中心。(注意边界) ...
重排链表,难度为「中等」,根据 LeetCode 评论区爆料,字节出现过,考察最优解。 一、题目描述 给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为:L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
给定链表 1->2->3->4, 重新排列为 1->4->2->3. 示例2: 给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3. 思路: 思路一: 栈 想法: 把节点压入栈中, 再弹出来,不就可以实现倒过来了吗? 难点: 弹出多少? 弹出一半? 要考虑!