Problem: 160. 相交链表
题目描述
思路
用两个指针p1与p2分别指向headA与headB,当p1与p2不相等时,若p1遍历到链表A的尾部时再将p1指向headB继续遍历;若p2遍历到链表B的尾部时再将p2指向headA继续遍历;
复杂度
时间复杂度:
O ( m + n ) O(m + n) O(m+n);其中 m m m是链表A的长度 n n n是链表B的长度
空间复杂度:
O ( 1 ) O(1) O(1)
Code
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
public class Solution {
/**
* Find intersecting nodes of intersecting linked lists
*
* @param headA The head node of linked list A
* @param headB The head node of linked list B
* @return ListNode
*/
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode p1 = headA;
ListNode p2 = headB;
while (p1 != p2) {
if (p1 == null) {
p1 = headB;
} else {
p1 = p1.next;
}
if (p2 == null) {
p2 = headA;
} else {
p2 = p2.next;
}
}
return p1;
}
}