编写c程序,删除单链表head中的重复结点。
时间: 2024-03-15 18:46:58 浏览: 81
删除单链表中重复结点
4星 · 用户满意度95%
以下是一份基于C语言的代码,可以删除单链表中的重复节点:
```c
#include <stdio.h>
#include <stdlib.h>
// 单链表结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
// 创建单链表
Node* createList(int arr[], int n) {
Node *head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
if (!head) {
head = tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
// 删除重复节点
void deleteDuplicatedNodes(Node *head) {
Node *p = head;
while (p && p->next) {
if (p->data == p->next->data) {
Node *tmp = p->next;
p->next = tmp->next;
free(tmp);
} else {
p = p->next;
}
}
}
// 打印单链表
void printList(Node *head) {
for (Node *p = head; p; p = p->next) {
printf("%d ", p->data);
}
printf("\n");
}
// 主函数
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 5};
Node *head = createList(arr, sizeof(arr) / sizeof(int));
printf("原始链表:");
printList(head);
deleteDuplicatedNodes(head);
printf("删除重复节点后的链表:");
printList(head);
return 0;
}
```
在上述代码中,我们首先定义了一个 `Node` 结构体,它包含了链表中每个节点的数据和指向下一个节点的指针。然后,我们使用 `createList` 函数创建一个单链表,该函数接受一个整型数组和数组大小作为参数,返回一个指向链表头节点的指针。接着,我们使用 `deleteDuplicatedNodes` 函数删除单链表中的重复节点,该函数接受一个指向链表头节点的指针,并遍历链表,删除重复节点。最后,我们使用 `printList` 函数打印单链表的内容。在主函数中,我们创建一个整型数组,然后调用 `createList` 函数创建一个单链表,调用 `deleteDuplicatedNodes` 函数删除重复节点,最后调用 `printList` 函数打印删除重复节点后的单链表。
阅读全文