图片说明

  • 双重遍历

    public class Solution {
      // 链表的节点完全相同应该就好理解了,并不是节点中的值相同。地址内存相同
      // 你不知道后面是否有跟前面一样的点
      // 双重遍历
      public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
          while (headA != null) {
              ListNode temp = headB;
              while (temp != null) {
                  if (headA == temp)
                      return headA;
                  temp = temp.next;
              }
              headA = headA.next;
          }
          return null;
      }
    }
  • 哈希表

    public class Solution {
      public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
          HashSet<ListNode> hs = new HashSet<ListNode>();
          while(headA!=null) {
              hs.add(headA);
              headA = headA.next;
          }
          while(headB!=null) {
              if(hs.contains(headB))
                  return headB;
              headB = headB.next;
          }
    
          return null;
      }
    }
  • 双指针

    public class Solution {
      // 链表的节点完全相同应该就好理解了,并不是节点中的值相同。地址内存相同
      // 你不知道后面是否有跟前面一样的点
      // 双重遍历
      public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
          int lenA = 0;
          int lenB = 0;
          ListNode tempA = headA;
          ListNode tempB = headB;
          while(tempA!=null) {
              lenA++;
              tempA = tempA.next;
          }
          while(tempB !=null) {
              lenB++;
              tempB = tempB.next;
          }
          if(lenA>lenB) {
              for(int i = 0 ; i < lenA-lenB ; i++) {
                  headA = headA.next;
              }
          }
          else {
              for(int i = 0 ; i < lenB - lenA; i++) {
                  headB = headB.next;
              }
          }
          while(headB!=null&&headA!=null) {
              if(headB == headA) {
                  return headB;
              }
              else {
                  headB = headB.next;
                  headA = headA.next;
              }
          }
          return null;
      }
    }