/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
int getL(struct ListNode *list)//写个探测链表大小的函数
{
int length = 0;
while (list)
{
length++;
list = list->next;
}
return length;
}
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{
if (!headA || !headB) //任一链表为空则不存在相交可能
{
return NULL;
}
struct ListNode *nodeA = headA;
struct ListNode *nodeB = headB;
int lA = getL(nodeA);
int lB = getL(nodeB);
int dis = (lA < lB) ? (lB-lA) : (lA - lB); //算出两个链表的长度差值
if (lA > lB) //找到较长链表,让其指针先走差值位数
{
for (int i = 0; i < dis; i++)
{
nodeA = nodeA->next;
}
}
else
{
for (int i = 0; i < dis; i++)
{
nodeB = nodeB->next;
}
}
while (nodeA != nodeB) // 屏蔽掉长度差后,同步遍历两个链表,找到相交节点后跳出循环;若没有相交节点,nodeA取值为null
{
nodeA = nodeA->next;
nodeB = nodeB->next;
}
return nodeA;
}
160. 相交链表个人解法
最新推荐文章于 2024-09-10 20:37:54 发布