两个有序链表序列的交集,写出用c++的完整代码
时间: 2024-10-16 12:15:35 浏览: 52
为了找到两个有序链表的交集,你可以采用双指针法。首先创建两个指针分别指向两个链表的头部,并在遍历时比较节点值。当遇到相同的节点时,开始记录该节点作为交集的起点。以下是C++的代码实现:
```cpp
#include <iostream>
using namespace std;
// 链表节点结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 定义交集链表函数
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
if (!headA || !headB) return NULL; // 如果任一链表为空,直接返回NULL
ListNode* pA = headA, *pB = headB; // 创建两个指针
while (pA != pB) { // 当两个指针不相等时继续移动
if (pA == NULL) { // 如果 pA 到达了头B的位置
pA = headB; // 从头B开始
} else if (pB == NULL) { // 同理,如果 pB 到达了头A的位置
pB = headA;
} else { // 否则,两者同时移动
if (pA->val < pB->val) {
pA = pA->next;
} else {
pB = pB->next;
}
}
}
return pA; // 返回相遇的节点,即交集链表的头部
}
int main() {
// 假设你已经有一个函数用于创建并初始化链表
ListNode* listA = createLinkedList(); // 例如创建链表A
ListNode* listB = createLinkedList(); // 例如创建链表B
ListNode* intersection = getIntersectionNode(listA, listB); // 获取交集
if (intersection) {
cout << "Intersection nodes are: ";
while (intersection) {
cout << intersection->val << " -> ";
intersection = intersection->next;
}
} else {
cout << "No intersection found.";
}
return 0;
}
```
阅读全文