描述 删除给定链表中的重复元素(链表中元素从小到大有序排列),使链表中的所有元素都只出现一次 例如: 给定的链表为1->1->2,返回1->2 给定的链表为1->1->2->3->3,返回1->2->3 数据范围:链表长度满足 0≤n≤100,链表中任意节点的值满足 ∣val∣≤1000 要求:空间复杂度 O(1),时间复杂度 O(n) 输入描述: 一行内输入一串整数,以空格间隔,以# 结束。 输出描述: 一串去重后整数,以空格间隔,以# 结束。
时间: 2024-04-16 11:29:07 浏览: 103
你可以使用以下的 C 代码来实现删除给定链表中的重复元素,并输出去重后的整数链表:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* deleteDuplicates(ListNode* head) {
if (head == NULL) {
return NULL;
}
ListNode* current = head;
while (current->next != NULL) {
if (current->val == current->next->val) {
ListNode* temp = current->next;
current->next = current->next->next;
free(temp);
} else {
current = current->next;
}
}
return head;
}
void printList(ListNode* head) {
ListNode* current = head;
while (current != NULL) {
printf("%d ", current->val);
current = current->next;
}
printf("#\n");
}
int main() {
ListNode* head = NULL;
ListNode* tail = NULL;
int value;
printf("请输入一串整数,以空格间隔,以# 结束:\n");
while (scanf("%d", &value) == 1) {
if (value == -1) {
break;
}
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = value;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
ListNode* newHead = deleteDuplicates(head);
printf("去重后的整数链表为:\n");
printList(newHead);
return 0;
}
```
你可以输入一串整数,以空格间隔,以 "#" 结束。程序将根据输入构建链表,然后调用 `deleteDuplicates` 函数删除链表中的重复元素,并输出去重后的整数链表,以空格间隔,以 "#" 结束。链表中的元素按照从小到大的顺序排列。注意,程序中的链表节点使用了 `ListNode` 结构体来表示。
阅读全文