算法训练营第三天链表理论基础 203.移除链表元素 707.设计链表 206.反转链表
链表理论基础
Definition:
什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。
链表的入口节点称为链表的头结点也就是head。
Types:
单链表;双链表;循环链表
203.移除链表元素
很简单的练习题 主要是 熟悉listnode 在java里的创建
java语法里只有node.next 没有node->next(C,C++)
这个题没问题就是忘记了处理头节点
看了代码随想录 有三种做法:
最基本的删除
1.先去除头节点(因为可能是 [7,7,7,7]这种 所以要 用while)然后再找一遍val
2.添加头节点
3.多射一个 pre node,每次移动 cur node pre node都需要移动。(这样很方便处理 cur null问题)
这个题开始以为很简单,就没怎么用心。但其实里面有很多小问题,比如头节点的处理,然后以及cur是null和cur_next是null的处理
需要铭记!!!得保证cur不是null!!
707.设计链表
开始写错了,写错的地方在于 addIndex时没考虑 当index可以加到list之后,也就是index可以=nums !!!
然后 deleteIndex没考虑 delete后 nail也需要更新的情况!!!
使用head 和 nail一定要注意 更新!!
206.反转链表
初想法:
可以用一个可变数组存储一下 ArrayList<Integer> list = new ArrayList<>();
看完代码随想录:
初想法很笨,完全不用再建一个新的链表。只用在原基础上 反转指针方向就好.
代码随想录说这是双指针法,想了想确实是 我每次也是东 pre 和 cur。但自己做完 也没想到这就是双指针!看来要多做 多想
还可以用递归: