下面是一个使用C语言编写的示例代码,用于删除排序链表中的重复元素:
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 插入节点到链表末尾
void insertNode(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
// 删除排序链表中的重复元素
void deleteDuplicates(Node* head) {
if (head == NULL) {
return;
}
Node* current = head;
while (current->next != NULL) {
if (current->data == current->next->data) {
Node* temp = current->next;
current->next = temp->next;
free(temp);
} else {
current = current->next;
}
}
}
// 打印链表
void displayList(Node* head) {
if (head == NULL) {
printf("Linked list is empty.\n");
} else {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
}
//主函数
int main() {
Node* head = NULL;
insertNode(&head,1);
insertNode(&head,2);
insertNode(&head,2);
insertNode(&head,3);
insertNode(&head,4);
insertNode(&head,4);
insertNode(&head,5);
printf("Original Linked List: ");
displayList(head);
deleteDuplicates(head);
printf("Linked List after removing duplicates: ");
displayList(head);
return0;
}
```
在上述代码中,我们首先定义了链表节点的结构体 `Node`,以及一些常用的链表操作函数。
在 `deleteDuplicates()` 函数中,我们首先检查链表是否为空。然后,我们使用两个指针 `current` 和 `temp` 进行遍历。如果当前节点的值和下一个节点的值相等,我们将下一个节点删除,并释放相应的内存。否则,我们将 `current` 指针指向下一个节点。
在 `main()` 函数中,我们创建一个排序链表,并插入了一些重复的元素。然后,我们打印原始链表的内容,调用 `deleteDuplicates()` 函数删除重复元素,并打印删除重复元素后的链表内容。
请注意,上述代码仅适用于已排序的链表。如果链表未排序,我们需要先对链表进行排序,然后再进行删除重复元素的操作。