代码思路:
代码思路如下:
- 定义两个指针
p
和q
分别指向链表str1
和str2
的第一个节点(即头结点的下一个节点),并进行循环。 - 对于每个节点
p
,都将指针q
重新指向链表str2
的第一个节点,然后再进行循环。 - 对于每组节点
p
和q
,比较它们是否相等(即它们所指向的地址是否相同),如果相等,则找到了第一个公共节点,输出该节点的数据值,并返回。 - 如果循环完了整个链表
str2
仍然没有找到公共节点,则指针p
向后移动一位,继续上述步骤。
void findFirstCommonNode(Node* str1, Node* str2)
{
Node* p = str1->next; // 指针 p 指向链表 str1 的第一个节点
Node* q = str2->next; // 指针 q 指向链表 str2 的第一个节点
// 循环遍历链表 str1
while (p != NULL)
{
// 每次循环遍历链表 str2
q = str2->next;
while (q != NULL)
{
// 找到第一个公共节点,输出数据值并返回
if (p == q)
{
cout << p;
return;
}
q = q->next; // 指针 q 指向链表 str2 的下一个节点
}
p = p->next; // 指针 p 指向链表 str1 的下一个节点
}
}