LeetCode链表题解

面试题 02.03. 删除中间节点

image-20200826175047925
code-snapshot

可以删除链表至少为二的头节点,不能删除尾节点。

image-20200826174537317

237. 删除链表中的节点

image-20200826174728909
code-snapshot

这与上题一摸一样。。

160. 相交链表

image-20200826201250009

要求时间复杂度为 O(N),空间复杂度为 O(1)。如果不存在交点则返回 null。

设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。

当访问 A 链表的指针访问到链表尾部时,令它从链表 B 的头部开始访问链表 B;同样地,当访问 B 链表的指针访问到链表尾部时,令它从链表 A 的头部开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。

如果不存在交点,那么 a + b = b + a,以下实现代码中 l1 和 l2 会同时为 null,从而退出循环。

code-snapshot (3)
image-20200826203747559

21. 合并两个有序链表

image-20200826193736648
code-snapshot (1)

思路很简单,创建一个新的节点,while循环遍历l1和l2并且比较大小,谁小添加谁。按照题意如果某一条链表先遍历完了,另一条没有遍历完成,那么剩下的直接添加就行。最后返回头节点head.next

image-20200826200949573
code-snapshot (2)

也可以使用迭代。

你可能感兴趣的:(LeetCode链表题解)