leetcode题型分析《链表》

1 单向链表

增加dummy节点,减少代码复杂程度,不用担心头节点为空的情况。

剑指offer II 21 删除倒数第N个节点

思路:定有两个指针,让指针一先走N步,然后两个指针一起前进,当指针一到达链表尾部时,指针二位于倒数第N个节点。

剑指offer II 22 链表中环的入口节点

思路:定义快慢指针,快指针一次走两步,慢指针一次一步,当快慢指针相遇时,将快指针重新指向头,然后一次一步,当快慢指针再次相遇时,即为环的入口点。

剑指offer II 23 两个链表的第1个重合节点

思路1:定义p1,p2指针分别指向链表list1和list2,当p1或者p2遍历到链表尾时,又重新从list2或者list1头开始,当再次相遇即为重合节点。

思路2:定义两个栈,分别将list1和list2加入栈中,然后比较,当两个栈节点相等节点即为重合节点。

剑指offer II 24 反转链表

思路:用三个指针分别指向当前节点,前一个节点,和下一个节点。

a0cb04b1fec44b2b932f0307886578e9.jpg

 有于当前节点j会与下一个节点k之间出现断裂,所以定义一个next节点将cur.next保存起来,为改变其指向让cur.next = prev;然后递推prev  = cur; cur = next;

d03b09ea8ddc4feea2028782dc7c0c10.jpg

 剑指offer II 25 链表中的数字相加

思路:想把两个链表反转,再把反转之后的链表逐个相加,最后把表示和得链表反转。

2 双向链表和循环链表

剑指offer 28 展平多级双向链表

思路:链表里面嵌套子链表,子链表又继续嵌套子链表适合用递归解决该问题。定义递归函数getTail()或者链表尾,然后将其插入上一级链表。

8cb8f0882cb0455682ea7715c05b3dc6.jpg

 

剑指offer 29 排序的循环链表

思路:试图找到两个相邻的节点,如果待插入节点位于相邻节点之间插入,如果没有则表明待插入节点可能是最大最小值插入原本最大最小值之间。

fb05ca8dccab4c2f8bd519ca1a8976d5.jpg

 259dab8b12a6440bb15047b855401c0a.jpg

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值