删除两个有序链表的重复数据的代码用c需要
时间: 2024-12-19 20:13:51 浏览: 8
在C语言中,删除两个已排序链表中的重复节点通常涉及到遍历两个链表并比较节点值。这里是一个基本的算法步骤:
1. 定义两个指针,`p1` 和 `p2` 分别指向第一个链表的头节点和第二个链表的头节点。
2. 创建一个新的链表 `result` 作为结果。
3. 遍历两个链表,当发现 `p1` 和 `p2` 的节点值相同时,只将 `p1` 指向的节点添加到结果链表中,并将 `p1` 和 `p2` 向后移动。
4. 如果 `p1` 或 `p2` 到达了各自的链表尾部,将剩余未检查的部分添加到结果链表。
这是一个简化版的代码实现,假设链表节点包含整数值和一个指向下一个节点的指针:
```c
typedef struct Node {
int val;
struct Node* next;
} Node;
Node* deleteDuplicates(Node* head1, Node* head2) {
Node *result = NULL, *current = NULL;
while (head1 && head2) {
if (head1->val == head2->val) {
if (!result || result->val != head1->val) {
current = result;
result = new Node();
result->val = head1->val;
}
} else {
if (result && result->next) {
result = result->next;
}
if (head1->val < head2->val) {
current = head1;
head1 = head1->next;
} else {
current = head2;
head2 = head2->next;
}
}
}
// 将剩余部分添加到结果链表
while (head1) {
current->next = head1;
current = head1;
head1 = head1->next;
}
if (head2) {
current->next = head2;
}
return result;
}
// 假设有一个辅助函数 `new Node()` 来创建新的链表节点
```
阅读全文