题目链接: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;
}
}