C语言创建一带头结点的单链表,将表中值相同的元素仅保留一个结点。
时间: 2024-10-14 15:07:48 浏览: 7
在C语言中,创建一个带头结点的单链表并删除值相同的节点通常涉及以下几个步骤:
1. 定义结构体:首先定义一个链表节点结构,包含数据域和指向下一个节点的指针。
```c
typedef struct ListNode {
int data; // 数据域存储整数值
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
```
2. 创建头节点:初始化一个空链表,可以设置头节点的数据为空。
```c
ListNode* head = (ListNode*)malloc(sizeof(ListNode)); // 分配内存
head->data = 0; // 或者设置初始值为某个特定值
head->next = NULL;
```
3. 插入新节点:遍历链表,如果找到的数据与当前节点相同,则跳过;否则插入新的节点。
```c
void insertUniqueValue(ListNode** head, int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
if (*head == NULL || (*head)->data != value) {
newNode->next = *head;
*head = newNode;
} else {
ListNode* current = *head;
while (current->next != NULL && current->next->data == value) {
current = current->next;
}
newNode->next = current->next;
if (current->next != NULL) {
current->next = newNode;
}
}
}
```
4. 删除多余的节点:当遇到值相同的节点时,更新前一个节点的`next`指针,使其指向下一个不同值的节点。
5. 示例完整代码:
```c
#include <stdlib.h>
// ...其他定义
int main() {
// 初始化链表
ListNode* head = createUniqueList(&head, /* 初始值 */);
// 添加元素并保持唯一值
for (int i = 1; i <= 10; i++) {
insertUniqueValue(&head, i);
}
// 打印链表(仅显示唯一值)
printList(head);
return 0;
}
void printList(ListNode* head) {
ListNode* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
// 其他辅助函数...
```