C++两个升序链表求交集,输入两个递增的链表l1和l2,将相交的数存到链表l里面,再输出链表l 代码
时间: 2024-06-17 14:00:41 浏览: 107
可以使用双指针的方法来解决这个问题,具体思路如下:
1. 定义一个新的链表l来存储相交的数;
2. 定义两个指针p1和p2,分别指向链表l1和l2的头节点;
3. 如果p1指向的节点的值小于p2指向的节点的值,则将p1向后移动一位;
4. 如果p2指向的节点的值小于p1指向的节点的值,则将p2向后移动一位;
5. 如果p1和p2指向的节点的值相等,则将该节点的值添加到链表l中,并将p1和p2都向后移动一位;
6. 重复步骤3到5,直到其中一个链表到达了末尾。
代码如下:
```cpp
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* getIntersectionNode(ListNode* l1, ListNode* l2) {
ListNode* l = new ListNode(-1);
ListNode* p = l;
ListNode* p1 = l1;
ListNode* p2 = l2;
while (p1 != NULL && p2 != NULL) {
if (p1->val < p2->val) {
p1 = p1->next;
}
else if (p1->val > p2->val) {
p2 = p2->next;
}
else {
p->next = new ListNode(p1->val);
p = p->next;
p1 = p1->next;
p2 = p2->next;
}
}
return l->next;
}
int main() {
ListNode* l1 = new ListNode(1);
l1->next = new ListNode(2);
l1->next->next = new ListNode(3);
l1->next->next->next = new ListNode(4);
l1->next->next->next->next = new ListNode(5);
ListNode* l2 = new ListNode(2);
l2->next = new ListNode(4);
l2->next->next = new ListNode(6);
ListNode* l = getIntersectionNode(l1, l2);
while (l != NULL) {
cout << l->val << " ";
l = l->next;
}
return 0;
}
```
阅读全文