题目简介
编写一个程序,找到两个单链表相交的起始节点。

LeetCode
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if(headA == NULL || headB == NULL)
return NULL;
ListNode* cur = headA;
ListNode* prev = headB;
int count = 0;
int num = 0;
while(cur != NULL)
{
cur = cur->next;
count++;
}
while(prev != NULL)
{
prev = prev->next;
num++;
}
ListNode* longL = headA;
ListNode* shortL = headB;
if(num > count)
{
longL = headB;
shortL = headA;
}
int gap = abs(count - num);
while(gap--)
{
longL = longL->next;
}
while(longL && shortL)
{
if(longL != shortL)
{
longL = longL->next;
shortL = shortL->next;
}
else
{
return longL;
}
}
return NULL;
}
本文介绍了一种寻找两个单链表相交起始节点的方法。通过遍历两个链表,计算长度并调整较长链表的起点,从而实现同步遍历找到交点。此算法适用于LeetCode相交链表题目。
719

被折叠的 条评论
为什么被折叠?



