双指针
y总nb就完事了!
在两个链表都没有环的情况下,可以使用两个指针。
指针p遍历第一个链表,指针q遍历第二个链表。
当遍历完当前链表后,遍历另一个链表。
最终两个指针一定会值相等:
- 若两链表不相交,则p=q=NULL
- 若相交,则p=q即为所求
最终返回p即为所求。
C++代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
auto p=headA,q=headB;
while(p!=q)
{
if(p) p=p->next;
else p=headB;
if(q) q=q->next;
else q=headA;
}
return p;
}
};