#include <stdio.h> #include <stdlib.h>

// 定义单链表结构体 typedef struct ListNode { int val; struct ListNode* next; } ListNode;

// 创建单链表 ListNode* createList(int* arr, int size) { if (size == 0) { return NULL; } ListNode* head = (ListNode*)malloc(sizeof(ListNode)); head->val = arr[0]; head->next = NULL; ListNode* prev = head; for (int i = 1; i < size; i++) { ListNode* node = (ListNode*)malloc(sizeof(ListNode)); node->val = arr[i]; node->next = NULL; prev->next = node; prev = node; } return head; }

// 删除单链表中的重复元素 ListNode* deleteDuplicates(ListNode* head) { if (head == NULL) { return NULL; } ListNode* prev = head; ListNode* curr = head->next; while (curr != NULL) { if (curr->val == prev->val) { prev->next = curr->next; free(curr); curr = prev->next; } else { prev = curr; curr = curr->next; } } return head; }

// 打印单链表 void printList(ListNode* head) { while (head != NULL) { printf("%d ", head->val); head = head->next; } printf("\n"); }

int main() { int arr[] = {1, 2, 2, 3, 3, 3, 4, 5, 5, 6}; int size = sizeof(arr) / sizeof(arr[0]); ListNode* head = createList(arr, size); printf("Original list: "); printList(head); head = deleteDuplicates(head); printf("List after deletion of duplicates: "); printList(head); return 0; }

C语言实现单链表去重算法 - 每个重复元素只保留一个

原文地址: https://www.cveoy.top/t/topic/mX5H 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录