写一个关于单链表的C语言程序
时间: 2024-05-13 16:15:42 浏览: 69
c语言单链表程序
下面是一个简单的单链表的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct node {
int data; // 数据域
struct node *next; // 指针域
} Node;
// 初始化单链表
Node* initList() {
Node *head = (Node*)malloc(sizeof(Node)); // 创建头结点
head->next = NULL; // 初始为空链表
return head;
}
// 在链表末尾添加新节点
void addNode(Node *head, int data) {
Node *p = head;
while (p->next != NULL) { // 找到链表最后一个节点
p = p->next;
}
Node *newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = data; // 设置新节点的数据域
newNode->next = NULL; // 新节点的指针域指向空
p->next = newNode; // 将新节点接到链表最后
}
// 删除链表中的指定节点
void deleteNode(Node *head, int data) {
Node *p = head->next;
Node *pre = head;
while (p != NULL && p->data != data) { // 找到要删除的节点
pre = p;
p = p->next;
}
if (p != NULL) { // 找到了要删除的节点
pre->next = p->next; // 将前一个节点的指针域指向要删除节点的下一个节点
free(p); // 释放要删除节点的内存
}
}
// 遍历链表并输出每个节点的数据域
void traverseList(Node *head) {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node *head = initList(); // 初始化链表
addNode(head, 1); // 在链表末尾添加新节点
addNode(head, 2);
addNode(head, 3);
addNode(head, 4);
traverseList(head); // 遍历链表并输出每个节点的数据域
deleteNode(head, 3); // 删除节点
traverseList(head); // 再次遍历链表并输出每个节点的数据域
return 0;
}
```
阅读全文