160. 找到两个链表的交点
160.Intersection of Two Linked Lists (Easy)
2020-7-12 22:03:18
题目描述
找到两个单链表相交的起始节点。。
例如以下示例中 A 和 B 两个链表相交于 c1:
1 | A: a1 → a2 |
但是不会出现以下相交的情况,因为每个节点只有一个 next 指针,也就只能有一个后继节点,而以下示例中节点 c 有两个后继节点。
1 | A: a1 → a2 d1 → d2 |
要求时间复杂度为 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,从而退出循环。
1 | /** |
206.反转链表
206.Reverse Linked List (Easy)
2020-8-3 22:13:31
题目描述
反转一个单链表。
1 | 示例: |
解题思路
递归
1 | public ListNode reverseList(ListNode head) { |
头插法
1 | public ListNode reverseList(ListNode head) { |
21. 合并两个有序的链表
21.Merge Two Sorted Lists (Easy)
2020-8-4 14:38:30
题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
1 | 示例: |
解题思路
1 | /** |
1 | //递归 |
83. 从有序链表中删除重复节点
83.Remove Duplicates from Sorted List (Easy)
2020-8-4 15:02:21
题目描述
1 | Given 1->1->2, return 1->2. |
解题思路
1 | class Solution { |