1.题目描述
值得注意的是,除了输入的两个链表,这里可以不用理会输入示例中的其他内容,我也不知道这些东西有什么用。
2.思路
双指针法,顾名思义就是设置两个指针p1,p2分别从headA和headB开始,同时依次往下走,当某一个指针走到该链表的末尾时,将该指针重新指向另一条链表的开端,为了方便理解,我画了一个图:
由于headA与headB虽然各自长度不同,但它们的长度之和是恒定的,故p1,p2终会相遇!
3.代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode* p = headA;
struct ListNode* q = headB;
while (p != q) {
if (p) p = p->next;
else p = headB;
if (q) q = q->next;
else q = headA;
}
return p;
}
执行结果:
看完不妨点个赞