Algorithm-List

date
Oct 26, 2023
slug
algorithm-list
status
Published
tags
algorithm
type
Post
https://twitter.com/tangdahe
summary
list opt

203 移除链表元素

需要注意,如果头节点也需要删除的话,就需要事先弄一个虚拟头节点
notion image
 
 

707 设计链表

这道题目设计链表的五个接口:
  • 获取链表第index个节点的数值
  • 在链表的最前面插入一个节点
  • 在链表的最后面插入一个节点
  • 在链表第index个节点前面插入一个节点
  • 删除链表的第index个节点
可以说这五个接口,已经覆盖了链表的常见操作,是练习链表操作非常好的一道题目
 

206 反转链表

notion image
 

双指针解法

首先定义一个 curr 指针,指向头结点,再定义一个 prev 指针,初始化为 null。
然后就要开始反转了,首先要把 curr->next 节点用 tmp 指针保存一下,也就是保存一下这个节点。
为什么要保存一下这个节点呢,因为接下来要改变 curr->next 的指向了,将 curr->next 指向 prev,此时已经反转了第一个节点了。
接下来,就是循环走如下代码逻辑了,继续移动 prev 和 curr 指针。
最后,curr 指针已经指向了 null,循环结束,链表也反转完毕了。 此时我们 return prev 指针就可以了,prev 指针就指向了新的头结点。
notion image
 
 

递归解法

递归到最后一个节点,先反转最后一个
图示逻辑
notion image
 
 

92 反转链表2

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表
和上述题目不同,该题需要反转指定 idx 区间的链表
notion image
思路:
  1. 首先减少 left 边界到 1,即新的 new head,之前的链表不动
  1. 从 left 开始进行反转,需要进行计数,每反转一次,即递归一次 right - -
  1. 需要保留 right.next ,因为反转结束 left.next = right.next
  1. 反转之后 noChange.next = right
notion image

© Craig Hart 2021 - 2024