0
点赞
收藏
分享

微信扫一扫

[ 链表OJ题--C语言] 相交链表 两个链表的第一个公共结点


 目录

题目来源:

实现代码:

思路分析:

题目来源:

LeetCode160题. 相交链表 - 力扣 /牛客网:两个链表的第一个公共结点

题目描述:

[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_02

实现代码:

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
int lenA = 0;
int lenB = 0;
struct ListNode *A = headA;
struct ListNode *B = headB;
//求A的长度
while(headA)
{
headA = headA->next;
lenA++;
}
while(headB)
{
headB = headB->next;
lenB++;
}
if(lenA<lenB)
{
//B 更长
int k = lenB-lenA;
while(k--)
{
B = B->next;
}
while(A&&B)
{
if(A == B)
{
return A;
}
A = A->next;
B = B->next;
}
return NULL;
}
else
{
//A 更长
int k = lenA-lenB;
while(k--)
{
A = A->next;
}
while(A&&B)
{
if(A == B)
{
return A;
}
A = A->next;
B = B->next;
}
return NULL;
}
return NULL;
}

[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_03

思路分析:

[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_04[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_链表_05

思路:首先遍历2个链表求出各链表的长度,再计算两个链表的长度差k,再让长的链表先走k步,此时两个链表的长度相同,一起向后走,如果在遍历结束前,两个指针指向同一块空间说明找到了交点的,如果在遍历结束前都没找到,说明两个链表不相交。

[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_06[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_07

[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_两个指针_08

 (本题完)


举报

相关推荐

0 条评论