问题
编写一个程序,找到两个单链表相交的起始节点。
注意:
如果两个链表没有交点,返回 null.
在返回结果后,两个链表仍须保持原有的结构。
可假定整个链表结构中没有循环。
程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
例子
思路
- 方法1 O(n) O(n)
遍历链表 A 并将每个结点的地址/引用存储在哈希表中。然后检查链表 B 中的每一个结点是否在哈希表中。若在,则为相交结点。
。 - 方法2 O(n) O(1)
a+b+None+c=c+b+None+a(当两个链表不想交时,b=0)
一个从a开始走,走到头None,再走c,一个从c开始走,走到头None,再走a:一定会遇到,当不相交时(b=0),相遇的结点为None,当相交时,相遇的结点为相交结点
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
//方法1
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
Map<