两个链表交点处的第一个节点是哪一个?

更新于
2026-09-22 10:40:46
23阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计295个文字,预计阅读时间需要2分钟。

两个链表交点处的第一个节点是哪一个?

题目描述:输入两个链表,找出它们的第一个公共节点。

输入:两个链表的链接

输出:第一个公共节点的值

链接:[点击访问](https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189&tPage=2&rp=2&ru=/ta/coding-interviews/question-ranking)


题目描述

输入两个链表,找出它们的第一个公共结点。

​​www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking​​

题解:

两个链表交点处的第一个节点是哪一个?

class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode *p1 = pHead1, *p2 = pHead2;
int l1 = 0, l2 = 0;
while (p1 != NULL) {
l1++;
p1 = p1->next;
}
while (p2 != NULL) {
l2++;
p2 = p2->next;
}
p1 = pHead1;
p2 = pHead2;
if (l1 > l2) {
for (int i = 0; i < l1 - l2; i++) {
p1 = p1->next;
}
while (p1 != NULL && p2 != NULL && p1 != p2) {
p1 = p1->next;
p2 = p2->next;
}
}
else {
for (int i = 0; i < l2 - l1; i++) {
p2 = p2->next;
}
while (p1 != NULL && p2 != NULL && p1 != p2) {
p1 = p1->next;
p2 = p2->next;
}
}
return p1;
}
};

本文共计295个文字,预计阅读时间需要2分钟。

两个链表交点处的第一个节点是哪一个?

题目描述:输入两个链表,找出它们的第一个公共节点。

输入:两个链表的链接

输出:第一个公共节点的值

链接:[点击访问](https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189&tPage=2&rp=2&ru=/ta/coding-interviews/question-ranking)


题目描述

输入两个链表,找出它们的第一个公共结点。

​​www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking​​

题解:

两个链表交点处的第一个节点是哪一个?

class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode *p1 = pHead1, *p2 = pHead2;
int l1 = 0, l2 = 0;
while (p1 != NULL) {
l1++;
p1 = p1->next;
}
while (p2 != NULL) {
l2++;
p2 = p2->next;
}
p1 = pHead1;
p2 = pHead2;
if (l1 > l2) {
for (int i = 0; i < l1 - l2; i++) {
p1 = p1->next;
}
while (p1 != NULL && p2 != NULL && p1 != p2) {
p1 = p1->next;
p2 = p2->next;
}
}
else {
for (int i = 0; i < l2 - l1; i++) {
p2 = p2->next;
}
while (p1 != NULL && p2 != NULL && p1 != p2) {
p1 = p1->next;
p2 = p2->next;
}
}
return p1;
}
};