链表_LeetCode_链表相交
原题:给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。
法一:消除长度差
struct ListNode getIntersectionNode(struct ListNode headA, struct ListNode headB) { struct ListNode pa = headA; struct ListNode pb = headB; while (pa != pb) { if (pa != NULL) { pa = pa->next; }else{ pa = headB; } if (pb != NULL) { pb = pb->next; }else{ pb = headA; } } if (pa ==NULL) { return NULL; } return pa; }
思路相同的做法还有:
(1)遍历得出两个链表的长度,从而算出长度差c,让较长链表先移动c个节点后,两链表再同时移动。
(2)将两链表A,B串连,得到链表A->B和B->A,然后同时遍历A->B和B->A。
🛫️起飞

浙公网安备 33010602011771号