MENU

LeetCode160. 相交链表

August 8, 2018 • Read: 3095 • LeetCode阅读设置

题目链接:LeetCode160展开目录

题解展开目录

两种做法,第一种,创建一个 HashSet,先把 A 链表的所有节点保存到 Set 中,然后遍历 B 链表,将 B 链表的所有节点保存进去,保存时进行判断,如果 Set 中已经有这个节点了,就直接 return 这个节点,否则就加进去

第二种做法,定义两个节点 end1,end2,定义两个变量 len1,len2,遍历 A 链表,将 end1 指到 A 链表的尾部,然后记录 A 链表的长度 len1,B 链表也是如此,然后判断其尾节点是否相同,如果尾节点不相同就直接 return null,反之,让 len1 和 len2 中较大的那个链表先遍历 Math.abs (len1-len2) 的长度,然后两个链表再同时遍历,遍历到节点相同时停止,返回该节点

代码展开目录
  • /**
  • * 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) {
  • ListNode end1 = headA,end2 = headB;
  • int len1 = 0,len2 = 0;
  • while(end1 != null) {
  • end1 = end1.next;
  • len1++;
  • }
  • while(end2 != null) {
  • end2 = end2.next;
  • len2++;
  • }
  • if(end1 != end2)
  • return null;
  • for(int i = 1;i <= Math.abs(len1-len2);i++) {
  • if(len1 > len2)
  • headA = headA.next;
  • else
  • headB = headB.next;
  • }
  • while(headA != null && headB != null) {
  • if(headA == headB)
  • return headA;
  • headA = headA.next;
  • headB = headB.next;
  • }
  • return null;
  • }
  • }
Last Modified: May 12, 2021
Archives Tip
QR Code for this page
Tipping QR Code