已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3
时间: 2024-03-16 19:18:08 浏览: 113
两个链表求交集(链表基础练习)
好的,让我看看可以为您服务!关于您的第一个问题,可以使用双指针来解决。首先,我们需要新建一个链表用于存储交集。然后,我们使用两个指针分别指向两个链表的头节点,并比较它们的值。如果两个值相同,则将该值添加到新链表中。如果S1当前节点的值小于S2当前节点的值,则S1向后移动一个节点,反之,则S2向后移动一个节点。直到一个链表遍历完成,则停止遍历。最终,新建的链表S3即为S1与S2的交集。
以下是C++代码实现:
```
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
ListNode* res = new ListNode(0);
ListNode* cur = res;
while (headA != NULL && headB != NULL) {
if (headA->val == headB->val) {
cur->next = new ListNode(headA->val);
cur = cur->next;
headA = headA->next;
headB = headB->next;
} else if (headA->val < headB->val) {
headA = headA->next;
} else {
headB = headB->next;
}
}
return res->next;
}
```
注意:这个函数不会判断S1与S2是否为非降序链表序列,需要在调用该函数前自己先进行判断。
阅读全文