算法训练DAY03

yanzhang2018 / 2023-05-13 / 原文

算法训练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
虚拟头节点一点要会的,在处理链表时这种方法能大幅减小处理边界的难度,
设计链表类是要注意链表和节点是不同的类,
反转链表的递归方法很巧妙,也突出了虚拟头结点的重要性。