两个有序链表的交集pta
时间: 2023-07-11 12:46:36 浏览: 110
PTA 两个有序链表序列的合并
这道题可以使用双指针的方法来解决,具体步骤如下:
1. 定义两个指针p1和p2,分别指向两个有序链表的头节点。
2. 当p1和p2都不为空时,进行以下判断:
a. 如果p1的值小于p2的值,则将p1向后移动一位;
b. 如果p2的值小于p1的值,则将p2向后移动一位;
c. 如果p1和p2的值相等,则将该值加入到结果链表中,并将p1和p2同时向后移动一位。
3. 当p1或p2为空时,遍历结束,返回结果链表即可。
下面是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;
ListNode *res = new ListNode(0), *p = res;
while (p1 && p2) {
if (p1->val < p2->val) p1 = p1->next;
else if (p2->val < p1->val) p2 = p2->next;
else {
p->next = new ListNode(p1->val);
p = p->next;
p1 = p1->next;
p2 = p2->next;
}
}
return res->next;
}
int main() {
ListNode *headA = new ListNode(1);
headA->next = new ListNode(2);
headA->next->next = new ListNode(3);
headA->next->next->next = new ListNode(4);
headA->next->next->next->next = new ListNode(5);
ListNode *headB = new ListNode(2);
headB->next = new ListNode(4);
headB->next->next = new ListNode(6);
ListNode *res = getIntersectionNode(headA, headB);
while (res) {
cout << res->val << " ";
res = res->next;
}
cout << endl;
return 0;
}
```
输出结果为:2 4
阅读全文