一、题目内容

image.png

二、题解

解法1:

思路

image.png
image.png

代码

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) {
  7. * val = x;
  8. * next = null;
  9. * }
  10. * }
  11. */
  12. public class Solution {
  13. public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
  14. ListNode A = headA, B = headB;
  15. while (A != B) {
  16. A = A != null ? A.next : headB;
  17. B = B != null ? B.next : headA;
  18. }
  19. return A;
  20. }
  21. }

解法2:

思路

  • 先对两条链表进行遍历,分别得到两条链表的长度,并计算差值 d。
  • 让长度较长的链表先走 d 步,然后两条链表同时走,第一个相同的节点即是节点。

    代码

    ```java /**

    • Definition for singly-linked list.
    • public class ListNode {
    • int val;
    • ListNode next;
    • ListNode(int x) {
    • val = x;
    • next = null;
    • }
    • } */ public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) {

      1. if (headA == null || headB == null) {
      2. return null;
      3. }
      4. int lena = 0, lenb = 0;
      5. ListNode a = headA, b = headB;
      6. while (a != null) {
      7. lena++;
      8. a = a.next;
      9. }
      10. while (b != null) {
      11. lenb++;
      12. b = b.next;
      13. }
      14. int d = lena - lenb;
      15. if (d > 0) {
      16. while (d-- > 0) {
      17. headA = headA.next;
      18. }
      19. } else {
      20. d = -d;
      21. while (d-- > 0) {
      22. headB = headB.next;
      23. }
      24. }
      25. while (headA != headB) {
      26. headA = headA.next;
      27. headB = headB.next;
      28. }
      29. return headA;

      } }

```