![[C语言][剑指offer篇]--两个链表的第一个公共节点,第1张 [C语言][剑指offer篇]--两个链表的第一个公共节点,第1张](/aiimages/%5BC%E8%AF%AD%E8%A8%80%5D%5B%E5%89%91%E6%8C%87offer%E7%AF%87%5D--%E4%B8%A4%E4%B8%AA%E9%93%BE%E8%A1%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%85%AC%E5%85%B1%E8%8A%82%E7%82%B9.png)
输入两个链表,找出它们的第一个公共节点。
- 定义ptrA指向headA,ptrB指向headB。
- 首先判断特殊情况,只要其中一个链表为空,则永远不会相交,返回NULL。
- 分别遍历链表,当ptrA走到尾时,指向headB,同时ptrB走到尾时,指向headA。
只有当ptrA 等于 ptrB时才退出循环,返回ptrA。
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *ptrA = headA;
struct ListNode *ptrB = headB;
if(headA == NULL || headB == NULL)
{
return NULL;
}
while(ptrA != ptrB)
{
ptrA = ptrA ? ptrA->next:headB;
ptrB = ptrB ? ptrB->next:headA;
}
return ptrA;
}
有没有人考虑过这段代码会陷入死循环?实际上,这段代码不会陷入死循环,即使输入两条没有交点的链表,最后也会因为 NULL = NULL而退出循环,并且返回NULL。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)