Leetcode:160.相交链表
求相交的链表节点
示例 1:
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Reference of the node with value = 8
输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
本题利用双指针pa, pb,依次对两个链表遍历,pa指针到末尾时移动到HeadB,pb指针到末尾时移动到HeadA,直到两者移动到同一节点,然后返回即可,注意无相交节点的情况。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
struct ListNode *pa = headA, *pb = headB;
if(!(headA && headB)) //空链表,直接返回NULL
return NULL;
while(pa != pb)
{
pa = pa->next;
pb = pb->next;
if(!(pa||pb)) //无相交节点
return NULL;
if(!pa)
pa = headB;
else if(!pb)
pb = headA;
}
return pa;
}
};