用c语言写出代码:删除单向链表中的重复节点,并打印结果。
时间: 2024-09-23 19:16:05 浏览: 83
c语言编程题之链表操作删除链表中的节点.zip
在C语言中,我们可以创建一个链表结构,然后遍历链表,利用指针比较元素来判断是否有重复。这里是一个简单的示例,展示了如何删除单向链表中的重复节点并打印剩余节点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 检查两个节点数据是否相等
int isDuplicate(Node* node1, Node* node2) {
return node1 && node2 && node1->data == node2->data;
}
// 删除重复节点
void deleteDuplicates(Node** head) {
if (*head == NULL || (*head)->next == NULL)
return;
Node* current = *head;
while (current != NULL) {
Node* runner = current->next;
while (runner != NULL) {
if (isDuplicate(current, runner)) {
Node* temp = runner;
runner = runner->next;
free(temp);
} else {
runner = runner->next;
}
}
current = current->next;
}
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
// 创建链表示例
Node* list = createNode(1);
list->next = createNode(2);
list->next->next = createNode(3);
list->next->next->next = createNode(2);
list->next->next->next->next = createNode(4);
list->next->next->next->next->next = createNode(5);
// 删除重复节点并打印
deleteDuplicates(&list);
printf("删除重复节点后的链表: ");
printList(list);
return 0;
}
```
这个程序首先创建了一个包含重复节点的链表,然后通过`deleteDuplicates`函数删除重复节点,最后使用`printList`函数打印链表内容。
阅读全文