如何用c++ 创建两个链表相交
时间: 2024-03-05 10:50:03 浏览: 79
基于 C++ 实现两个有序链表序列的交集【100010878】
5星 · 资源好评率100%
你好,下面是用C++创建两个相交链表的示例代码:
```c++
#include <iostream>
using namespace std;
// 定义链表节点
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 创建两个相交链表
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *p1 = headA, *p2 = headB;
while (p1 != p2) {
// 遍历到链表末尾后,从另外一个链表头部继续遍历
p1 = p1 == nullptr ? headB : p1->next;
p2 = p2 == nullptr ? headA : p2->next;
}
return p1;
}
int main() {
// 创建第一个链表
ListNode *headA = new ListNode(1);
ListNode *n1 = new ListNode(2);
ListNode *n2 = new ListNode(3);
ListNode *n3 = new ListNode(4);
headA->next = n1;
n1->next = n2;
n2->next = n3;
// 创建第二个链表
ListNode *headB = new ListNode(5);
ListNode *m1 = new ListNode(6);
ListNode *m2 = new ListNode(7);
ListNode *m3 = n2; // 第二个链表从第一个链表的第三个节点开始相交
headB->next = m1;
m1->next = m2;
m2->next = m3;
// 遍历两个链表验证相交
ListNode *intersectionNode = getIntersectionNode(headA, headB);
if (intersectionNode != nullptr) {
cout << "链表相交点为:" << intersectionNode->val << endl;
} else {
cout << "链表不相交" << endl;
}
return 0;
}
```
输出结果:
```
链表相交点为:3
```
在这个例子中,我们创建了两个相交链表,然后通过 `getIntersectionNode` 函数遍历两个链表,找到它们的相交点,并返回相交点的指针。在主函数中,我们输出了相交点的值。
阅读全文