c语言编程实现单向链表建立、删除、插入、输出
时间: 2023-09-29 21:11:17 浏览: 39
下面是一个简单的单向链表的 C 语言实现,包括建立、删除、插入和输出操作。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val; // 存放节点值
struct ListNode *next; // 存放下一个节点的指针
} ListNode;
// 建立链表
ListNode* createList(int a[], int n) {
ListNode *head, *p, *q;
head = (ListNode*) malloc(sizeof(ListNode));
head->next = NULL;
q = head;
for (int i = 0; i < n; i++) {
p = (ListNode*) malloc(sizeof(ListNode));
p->val = a[i];
p->next = NULL;
q->next = p;
q = p;
}
return head;
}
// 删除节点
ListNode* deleteNode(ListNode *head, int val) {
ListNode *p, *q;
p = head->next;
q = head;
while (p != NULL) {
if (p->val == val) {
q->next = p->next;
free(p);
break;
}
q = p;
p = p->next;
}
return head;
}
// 插入节点
ListNode* insertNode(ListNode *head, int val, int pos) {
ListNode *p, *q;
p = (ListNode*) malloc(sizeof(ListNode));
p->val = val;
q = head;
for (int i = 0; i < pos && q != NULL; i++) {
q = q->next;
}
p->next = q->next;
q->next = p;
return head;
}
// 输出链表
void printList(ListNode *head) {
ListNode *p;
p = head->next;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
int main() {
int a[] = {1, 2, 3, 4, 5};
int n = sizeof(a) / sizeof(int);
ListNode *head = createList(a, n);
printList(head); // 输出链表:1 2 3 4 5
head = deleteNode(head, 3);
printList(head); // 输出链表:1 2 4 5
head = insertNode(head, 3, 2);
printList(head); // 输出链表:1 2 3 4 5
return 0;
}
```
在上面的代码中,我们首先定义了一个 `ListNode` 结构体,来表示链表节点。然后我们分别实现了建立链表、删除节点、插入节点和输出链表等操作,最后在 `main` 函数中进行测试。