链表
Date:
链表经典题: 链表、双向链表、单向链表等题目的核心思路
203. 移除链表元素
- 如果不引入虚拟头节点的话。需要区分头节点的处理方式和中间节点的处理方式。
- 如果引入虚拟头节点,一切都可以按照中间节点的处理方式。
707. 设计链表
可以自己创建一个数据结构ListNode,我可太牛逼了直接再MyulinkedList上梭哈 自己创一个ListNode的话,那就可以存size了,时间复杂度会友好!同样也可以存一个vhead,一切都变得很顺利 注意细心一点,以后可以重复练练
206. 反转链表
- 每次对接两个节点,一个pre,一个cur
- cur.next预先存起来
- 从第一个元素开始,也就是pre=null, cur=head
- 到最后元素的后一个结束,也就是pre=lastnode, cur=null
24. 两两交换链表中的节点
比较简单,要处理1和2的话,就要找到0
- 注意.next.next的有效性判断,避免空指针异常
141. 环形链表
此题实际上是一个数学题。可以通过简单的画图推导发掘关系。
- 有环 –> 快慢指针会相遇
- 入口 –> a从相遇处开始,b从head开始,两个一步步走,终究会在入口处遇见 (由画图推导得来的关系)
19. 删除倒数第n个节点
找倒数第n个,可以通过快慢指针法来找,快指针先移动n步,然后快慢指针同时移动直至快指针移动到末尾。
- 要删倒数第n个,那么最终应该找到倒数第(n+1)个节点!