项目场景:
提示:这里简述项目相关背景:
链表基础练习题
问题描述:
提示:这里描述项目中遇到的问题:
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:
原因分析:
提示:这里填写问题的分析:
双指针:
只有当链表headA 和headB 都不为空时,两个链表才可能相交。因此首先判断链表 headA 和headB 是否为空,如果其中至少有一个链表为空,则两个链表一定不相交,返回 null
当链表 headA 和 headB 都不为空时,创建两个指针la 和lb,初始时分别指向两个链表的头节点 headA 和 headB,然后将两个指针依次遍历两个链表的每个节点
若la,lb不为空,相应的往后移动,
若la为空,将la指向headB, 若lb为空,将lb指向headA
当la,lb指向同一个节点/为空,返回指向的节点/ NULL;
证明过程:
解决方案:
提示:这里填写该问题的具体解决方案:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{
struct ListNode* la=headA;
struct ListNode* lb=headB;
if(headA==NULL || headB==NULL)return NULL;
while(la != lb)
{
la = (la == NULL ? headB : la->next);
lb = (lb == NULL ? headA : lb->next);
}
return la;
}