用c语言实现带头结点的链表
时间: 2023-10-24 07:04:46 浏览: 144
反转带头结点的链表(4种方法)
好的,我可以帮你解答关于C语言实现带头结点的链表的问题。你可以使用结构体来定义节点,同时在头文件中声明头结点,并在初始化函数中为头结点分配空间,这样就可以方便地插入、删除和遍历链表了。具体实现可以参考下面的代码:
```
#include <stdio.h>
#include <stdlib.h>
//定义结构体,包含两个成员:数据和下一个节点的指针
typedef struct node {
int data;
struct node *next;
} Node;
//头文件中声明头结点
Node *head;
//初始化函数,为头结点分配空间
void init() {
head = (Node *)malloc(sizeof(Node));
head->next = NULL;
}
//插入函数
void insert(int x) {
Node *p = head;
Node *new_node = (Node *)malloc(sizeof(Node));
if (new_node == NULL) {
printf("Error: memory allocation failed!\n");
exit(1);
}
new_node->data = x;
new_node->next = NULL;
while (p->next != NULL) {
p = p->next;
}
p->next = new_node;
}
//删除函数
void delete(int x) {
Node *p = head->next;
Node *prev = head;
while (p != NULL) {
if (p->data == x) {
prev->next = p->next;
free(p);
return;
}
prev = p;
p = p->next;
}
printf("Error: element not found!\n");
}
//遍历函数
void traverse() {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//主函数
int main() {
init();
insert(1);
insert(2);
insert(3);
traverse();
delete(2);
traverse();
return 0;
}
```
希望这能够帮助到你!如果你还有其他问题,可以继续问我哦。现在请听一个不太好笑的笑话:为什么程序员总是固执地认为 Unix 是最好的操作系统?因为他们自己编译了它。
阅读全文