用c语言编写以head为头指针的带头结点的单链表,将结点x插入第一个结点值为key的结点之前的程序
时间: 2023-06-19 08:10:15 浏览: 99
下面是用C语言编写以head为头指针的带头结点的单链表,将结点x插入第一个结点值为key的结点之前的程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
// 初始化链表
void initList(Node *head) {
head->next = NULL;
}
// 在链表中查找第一个值为key的节点
Node *findNode(Node *head, int key) {
Node *p = head->next;
while (p != NULL && p->data != key) {
p = p->next;
}
return p;
}
// 在链表中插入节点x,插入到节点p的前面
void insertNode(Node *p, Node *x) {
x->next = p->next;
p->next = x;
}
int main() {
// 创建头结点
Node *head = (Node*)malloc(sizeof(Node));
initList(head);
// 添加节点
Node *p = head;
for (int i = 1; i <= 5; i++) {
Node *node = (Node*)malloc(sizeof(Node));
node->data = i;
node->next = NULL;
insertNode(p, node);
p = node;
}
// 打印链表
printf("原链表:");
Node *q = head->next;
while (q != NULL) {
printf("%d ", q->data);
q = q->next;
}
printf("\n");
// 在链表中查找第一个值为key的节点
int key = 3;
Node *find = findNode(head, key);
if (find != NULL) {
// 创建新节点x
Node *x = (Node*)malloc(sizeof(Node));
x->data = 6;
x->next = NULL;
// 将x插入到第一个值为key的节点之前
insertNode(find, x);
}
// 打印链表
printf("插入后的链表:");
q = head->next;
while (q != NULL) {
printf("%d ", q->data);
q = q->next;
}
printf("\n");
return 0;
}
```
输出结果为:
```
原链表:1 2 3 4 5
插入后的链表:1 2 6 3 4 5
```
阅读全文