给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{
if(headA == NULL || headB == NULL)
return NULL;
//若链表有一个为空链表,则直接返回NULL
struct ListNode*p1 = headA,*p2 = headB;//定义两个分别指向两个链表头节点的指针
while(p1 != p2)
{
p1 = (p1!=NULL?p1->next:headB);
//若p1的next不为空,p1往后移动一个节点,若为空,p1指向另一链表的头节点
p2 = (p2!=NULL?p2->next:headA);
//若p2的next不为空,p1往后移动一个节点,若为空,p2指向另一链表的头节点
}
return p1;
//任意返回一个指针,指向即为相交节点因为两个指针在交点相遇
}
主函数自行编写,调用该函数即可。