c语言带头结点的单链表删除重复结点的代码
时间: 2024-10-27 17:04:51 浏览: 46
在 C 语言中,删除带头结点的单链表中的重复元素通常涉及到遍历链表和使用临时节点的方式来操作。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 创建新节点
ListNode* createNode(int data) {
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = data;
newNode->next = NULL;
return newNode;
}
// 删除重复节点
void removeDuplicates(ListNode **head) {
if (*head == NULL || (*head)->next == NULL)
return; // 如果链表为空或只有一个元素,直接返回
ListNode *current = *head;
while (current != NULL && current->next != NULL) {
if (current->val == current->next->val) { // 检查当前节点和下一个节点是否有相同的值
ListNode *temp = current->next;
current->next = temp->next; // 将重复节点从链表中移除
free(temp); // 释放内存
} else {
current = current->next; // 否则继续遍历
}
}
}
// 打印链表
void printList(ListNode *node) {
while (node != NULL) {
printf("%d ", node->val);
node = node->next;
}
printf("\n");
}
int main() {
// 创建测试链表
ListNode *head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
head->next->next->next->next = createNode(2);
printf("Original List: ");
printList(head);
removeDuplicates(&head);
printf("After Removing Duplicates: ");
printList(head);
return 0;
}
```
阅读全文