链表

Date:

链表经典题: 链表、双向链表、单向链表等题目的核心思路


203. 移除链表元素

  • 如果不引入虚拟头节点的话。需要区分头节点的处理方式和中间节点的处理方式。
  • 如果引入虚拟头节点,一切都可以按照中间节点的处理方式。

707. 设计链表

可以自己创建一个数据结构ListNode,我可太牛逼了直接再MyulinkedList上梭哈 自己创一个ListNode的话,那就可以存size了,时间复杂度会友好!同样也可以存一个vhead,一切都变得很顺利 注意细心一点,以后可以重复练练

206. 反转链表

  1. 每次对接两个节点,一个pre,一个cur
  2. cur.next预先存起来
  3. 从第一个元素开始,也就是pre=null, cur=head
  4. 到最后元素的后一个结束,也就是pre=lastnode, cur=null

24. 两两交换链表中的节点

比较简单,要处理1和2的话,就要找到0

  1. 注意.next.next的有效性判断,避免空指针异常

141. 环形链表

此题实际上是一个数学题。可以通过简单的画图推导发掘关系。

  1. 有环 –> 快慢指针会相遇
  2. 入口 –> a从相遇处开始,b从head开始,两个一步步走,终究会在入口处遇见 (由画图推导得来的关系)

19. 删除倒数第n个节点

找倒数第n个,可以通过快慢指针法来找,快指针先移动n步,然后快慢指针同时移动直至快指针移动到末尾。

  1. 要删倒数第n个,那么最终应该找到倒数第(n+1)个节点!