DAY03 链表part01

129 阅读2分钟

第二章 链表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都是一样,只不过放到函数调用中来做
    • 从后向前反转,更加晦涩难以理解,二刷要重点理解