LeetCode 160 相交链表
LeetCode 160 相交链表
题目描述:
编写一个程序,找到两个单链表相交的起始节点。
执行用时:2 ms, 在所有 Java 提交中击败了28.55%的用户
内存消耗:42.5 MB, 在所有 Java 提交中击败了71.52%的用户
构造成环
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
//边界条件
if(headA==null || headB==null) {
return null;
}
//构造成环
ListNode tail = headA;
while(tail.next!=null) {
tail = tail.next;
}
tail.next = headA;
//判断有无环
ListNode p1 = (headB!=null)?headB.next:headB;
ListNode p2 = (p1!=null)?p1.next:p1;
while(p1!=null && p2!=null && p1!=p2) {
//慢指针
p1 = (p1!=null)?p1.next:p1;
//快指针
p2 = (p2!=null)?p2.next:p2;
p2 = (p2!=null)?p2.next:p2;
}
//寻找相遇位置
if(p1!=null && p2!=null) {
p1 = headB;
while(p1!=p2) {
p1 = (p1!=null)?p1.next:p1;
p2 = (p2!=null)?p2.next:p2;
}
}
//断开环
tail.next = null;
return p2;
}
}