算法训练DAY03
算法训练DAY03|203. 移除链表元素 707. 设计链表 206. 反转链表
203. 移除链表元素
我的思路:
-遍历链表
- 删除对应节点
- 重构指针
实现细节:
-使用虚拟头节点会方便处理边界,不然很麻烦
- 遍历时 cur.next==val时,只需要让cur.next=cur.next.next否则就是cur=cur.next
707. 设计链表
大体思路:
- 链表节点类要单独定义
- 链表类中链表的定义其实就是MyLinkedList.head
实现细节:
- 单项链表 添加size属性会更容易处理边界情况
- python类中self的使用
206. 反转链表
大体思路:
- 创建虚拟头节点
- 递归反转两个相邻的节点
实现细节:
- 递归的终止条件是reverse(tail,None),此时直接return pre
- 正常情况下 reverse(pre,cur): .... return reverse(cur,cur.next(temp))
- 开始递归 revers(vis_head,head)
总结
今日用时1.5h
虚拟头节点一点要会的,在处理链表时这种方法能大幅减小处理边界的难度,
设计链表类是要注意链表和节点是不同的类,
反转链表的递归方法很巧妙,也突出了虚拟头结点的重要性。

浙公网安备 33010602011771号