前言 链表的操作问题,一般而言面试(机试)的时候不允许我们修改节点的值,而只能修改节点的指向操作。 思路通常都不难,写对链表问题的技巧是:一定要先想清楚思路,并且必要的时候在草稿纸上画图,理清「穿针引线」的先后步骤,然后再编码。 方法一:穿针引线 我们以下图中黄色区域的链表反转为例。 使用「206. 反转链表」的解
69.0k
解题思路: 1、我们定义两个指针,分别称之为 g(guard 守卫) 和p(point)。 我们首先根据方法的参数 m 确定 g 和p的位置。将g移动到第一个要反转的节点的前面,将p移动到第一个要反转的节点的位置上。我们以 m=2,n=4为例。 2、将p后面的元素删除,然后添加到 g 的后面。也即头插
18.1k
各位题友大家好! 今天是 @负雪明烛 坚持日更的第 53 天。今天力扣上的每日一题是「92. 反转链表 II」。 解题思路 这个题明显是「206. 反转链表」的进阶版,所以请在做出本题前,保证自己能做出 206 题。 反转链表问题的难点在于指针的指向修改,其实只要理清楚思路,一般不会出错的。链表题目建议自己在纸上画一画
6.3k
朴素解法 为了减少边界判断,我们可以建立一个虚拟头结点 dummy,使其指向 head,最终返回 dummy.next。 这种「哨兵」技巧能应用在所有的「链表」题目。 黄色部分的节点代表需要「翻转」的部分: 之后就是常规的模拟,步骤我写在示意图里啦 ~ 代码(感谢 @QianK ) 提供的 cpp 版本): 时间复杂
3.2k
思路 要翻转 m 到n的结点 哪些部分是要变动的?哪些部分是不动的? 从头结点到 m-1 结点是不动的,从n+1 结点开始的链也是不动的 中间的 m~n 结点怎么实现翻转?而且这个翻转是要联系上左右两链的。 我们这样做: 从前往后将 m~n 的结点逐个搬到「n+1 结点开始的链」,成为它的新头结点。这样
2.1k
友情提示:在用递归思想解题时,明确递推公式的含义后,不要试图想明白每一步是如何递归的,这很容易把自己绕晕哈。 01 LeetCode #206 反转链表 题目描述: 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路分析: 示例给出的链表,