题目

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
image.png

思路

一道题目很难理解的 “语文题”

思路就是:
设链表A私有部分为a,公有部分为c
链表B私有部分为b,公有部分为c

若相交:a+c+b =b+c+a
若不相交:a+b =b+a, 此时最终h1、h2都会指向NULL。

  1. public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
  2. ListNode h1 = headA, h2 = headB;
  3. while (h1 != h2) {
  4. h1 = h1 == null ? headB : h1.next;
  5. h2 = h2 == null ? headA : h2.next;
  6. }
  7. return h1;
  8. }