C语言编写排序链表中的重复元素,并重新输出

下面是一个使用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()` 函数删除重复元素,并打印删除重复元素后的链表内容。

请注意,上述代码仅适用于已排序的链表。如果链表未排序,我们需要先对链表进行排序,然后再进行删除重复元素的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值