#include <stdio.h>
#include <stdlib.h>
// 链表节点的结构体定义
struct Node {
int data;
struct Node* next;
};
// 删除有序链表中相同元素的函数
int removeDuplicates(struct Node* A) {
struct Node* p = A;
while (p != NULL) {
struct Node* r = p;
struct Node* rnext = r->next;
while (rnext != NULL && r->data == rnext->data) {
r->next = rnext->next;
free(rnext);
rnext = r->next;
}
p = p->next;
}
return 0;
}
// 打印链表
void printList(struct Node* head) {
struct Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
// 创建链表节点
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
int main() {
// 创建有序链表: 1 -> 1 -> 2 -> 3 -> 3 -> 3 -> 4
struct Node* head = createNode(1);
head->next = createNode(1);
head->next->next = createNode(2);
head->next->next->next = createNode(3);
head->next->next->next->next = createNode(3);
head->next->next->next->next->next = createNode(3);
head->next->next->next->next->next->next = createNode(4);
printf("原始链表:");
printList(head);
// 删除相同元素
removeDuplicates(head);
printf("删除相同元素后的链表:");
printList(head);
// 释放内存
while (head != NULL) {
struct Node* temp = head;
head = head->next;
free(temp);
}
return 0;
}