题目来源
量链表如果相交,返回相交的第一个结点,否则返回null
我的思路:
分别将两个链表存起来,如果最后一个结点不相等则不相交,否则往前找到第一个不相等的结点,这个结点的next即为相交的第一个结点
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
List<ListNode> list1=new ArrayList<>();
List<ListNode> list2=new ArrayList<>();
ListNode p=headA;
while (p!=null){
list1.add(p);
p=p.next;
}
p=headB;
while (p!=null){
list2.add(p);
p=p.next;
}
int i = list1.size()-1;
int j=list2.size()-1;
while (i>=0&&j>=0){
if(list1.get(i)!=list2.get(j)){
break;
}
i--;
j--;
}
if(i==list1.size()-1){
return null;
}
return list1.get(i+1);
}
优化空间复杂度
双指针走两遍,第二遍相遇时即为交点
![](https://img-blog.csdnimg.cn/img_convert/2d3de1037984c6108f292a257a745c25.png)
如果不相交,最终同时会到达null,也能得到正确的结果
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode p=headA;
ListNode q=headB;
while (p!=q){
if(p!=null){
p=p.next;
} else {
p=headB;
}
if(q!=null){
q=q.next;
} else {
q=headA;
}
}
return p;
}