已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
时间: 2024-03-16 09:18:47 浏览: 56
1. 定义节点结构体Node,包括元素值和指向下一个节点的指针。
2. 定义函数intersect(S1, S2),其中S1和S2分别表示链表S1和S2的头节点。
3. 初始化S3为空链表。
4. 从S1和S2的头节点开始遍历链表,比较两个节点的元素值,若相等则将该元素插入S3中。
5. 若S1或S2已经遍历到末尾,则退出循环。
6. 返回S3。
代码实现:
```
struct Node {
int val;
Node* next;
Node(int x) : val(x), next(NULL) {}
};
Node* intersect(Node* S1, Node* S2) {
Node* S3 = NULL;
Node* tail = NULL;
while (S1 && S2) {
if (S1->val == S2->val) {
if (!S3) {
S3 = new Node(S1->val);
tail = S3;
} else {
tail->next = new Node(S1->val);
tail = tail->next;
}
S1 = S1->next;
S2 = S2->next;
} else if (S1->val < S2->val) {
S1 = S1->next;
} else {
S2 = S2->next;
}
}
return S3;
}
```
阅读全文