已知顺序表L为按值递增有序的,设计算法清除顺序表中多余重复元素,C语言
时间: 2024-09-19 15:01:13 浏览: 69
在C语言中,可以使用一个while循环和一个临时变量来删除顺序表L中的重复元素。这里有一个简单的示例:
```c
#include <stdio.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 清除列表中的重复元素
void removeDuplicates(Node** head) {
if (*head == NULL || (*head)->next == NULL) {
return; // 如果列表为空或只有一个元素,无需处理
}
Node* current = *head;
Node* temp = NULL;
while (current != NULL) {
temp = current->next; // 记录下一个节点
while (temp != NULL && temp->data == current->data) { // 当前元素与下一个元素比较
temp = temp->next; // 跳过重复元素
}
current->next = temp; // 将非重复元素链接回链表
current = temp; // 移动到下一个非重复元素的位置
}
}
// 添加元素到链表
void addNode(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node* listHead = NULL;
addNode(&listHead, 5); // 示例添加一些元素
addNode(&listHead, 2);
addNode(&listHead, 5);
addNode(&listHead, 10);
addNode(&listHead, 2);
printf("Original List:\n");
printList(listHead);
removeDuplicates(&listHead);
printf("List after removing duplicates:\n");
printList(listHead);
return 0;
}
```
这个程序首先定义了一个Node结构体表示顺序表中的节点,并实现了添加元素、打印链表以及清除重复元素的功能。运行`main`函数可以看到结果。
阅读全文