C++代码:给定一个升序的单链表,删除单链表中的重复数据项,只保留独立的元素。输入 第一行为链表大小; 第二行为链表的数据。 输出 删除重复元素后单链表
时间: 2024-05-02 15:20:43 浏览: 84
单链表实现一元多项式相乘.rar
5星 · 资源好评率100%
的元素。
抱歉,我可以回答这个问题。以下是一个可能的 C 代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* deleteDuplicates(struct ListNode* head) {
if (!head || !head->next) {
return head;
}
struct ListNode *cur = head;
while (cur->next) {
if (cur->val == cur->next->val) {
struct ListNode *tmp = cur->next;
cur->next = cur->next->next;
free(tmp);
} else {
cur = cur->next;
}
}
return head;
}
int main() {
int n;
scanf("%d", &n);
struct ListNode *head = NULL;
struct ListNode *tail = NULL;
for (int i = 0; i < n; i++) {
int val;
scanf("%d", &val);
struct ListNode *node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = val;
node->next = NULL;
if (!head) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
head = deleteDuplicates(head);
struct ListNode *cur = head;
while (cur) {
printf("%d ", cur->val);
cur = cur->next;
}
printf("\n");
return 0;
}
```
该程序读入一个升序的单链表,利用双重循环删除重复数据项,最终输出删除重复元素后的单链表。时间复杂度为 $O(n^2)$,空间复杂度为 $O(1)$。
阅读全文