第二章 链表part01
day1 任务以及具体安排:docs.qq.com/doc/DUG9UR2…
day 2 任务以及具体安排:docs.qq.com/doc/DUGRwWX…
今日任务
● 链表理论基础
● 203.移除链表元素
● 707.设计链表
● 206.反转链表
详细布置
链表理论基础
建议:了解一下链表基础,以及链表和数组的区别
文章链接:programmercarl.com/%E9%93%BE%E…
203.移除链表元素
建议: 本题最关键是要理解 虚拟头结点的使用技巧,这个对链表题目很重要。
题目链接/文章讲解/视频讲解::programmercarl.com/0203.%E7%A7…
707.设计链表
建议: 这是一道考察 链表综合操作的题目,不算容易,可以练一练 使用虚拟头结点
题目链接/文章讲解/视频讲解:programmercarl.com/0707.%E8%AE…
206.反转链表
建议先看我的视频讲解,视频讲解中对 反转链表需要注意的点讲的很清晰了,看完之后大家的疑惑基本都解决了。
题目链接/文章讲解/视频讲解:programmercarl.com/0206.%E7%BF…
笔记
移除链表元素
两种方法:
- 原链表删除元素
- 使用虚拟头节点(更推荐)
- 创建当前指针cur,指向虚拟头节点 dummyhead
- 循环(当前节点的next不为空)
- 如果当前节点的next与val相等,则将cur.next = cur.next.next;
- 否则继续移动当前节点 cur = cur.next
- 返回dummy.next
设计链表
- 获取第n个节点的值
- 头部插入节点
- 尾部插入节点
- 第n个节点前插入节点
- 删除第n个节点
(找第n个节点时,要找到前面一个节点,这样增删都好操作; 同时需要明确边界问题,例如: 1.没有节点 2.只有一个节点 3.n为0 4.n为size-1(最后一个))
反转链表
-
双指针
- 首先定义一个cur指针,指向头结点,再定义一个pre指针,初始化为null。
- 然后就要开始反转了,首先要把 cur->next 节点用tmp指针保存一下,也就是保存一下这个节点。
- 为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。
- 接下来,就是循环走如下代码逻辑了,继续移动pre和cur指针。
- 最后,cur 指针已经指向了null,循环结束,链表也反转完毕了。 此时我们return pre指针就可以了,pre指针就指向了新的头结点。
-
递归
- 类似于双指针,用递归的方式取代while循环,初始化cur和pre都是一样,只不过放到函数调用中来做
- 从后向前反转,更加晦涩难以理解,二刷要重点理解