用c语言编写以head为头指针的带头结点的单链表,将结点x 插入第一个结点值为key的结点之前。
时间: 2023-06-26 13:07:38 浏览: 98
以下是实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 初始化链表
void initList(Node **head) {
*head = (Node *)malloc(sizeof(Node));
(*head)->next = NULL;
}
// 插入节点
void insert(Node *head, int key, int x) {
Node *p = head->next, *pre = head;
while (p != NULL && p->data != key) {
pre = p;
p = p->next;
}
if (p == NULL) {
printf("未找到key为%d的节点\n", key);
return;
}
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = x;
newNode->next = p;
pre->next = newNode;
}
// 打印链表
void printList(Node *head) {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node *head;
initList(&head);
int n, key, x;
printf("请输入节点个数:");
scanf("%d", &n);
printf("请输入节点数据:");
for (int i = 0; i < n; i++) {
int data;
scanf("%d", &data);
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = head->next;
head->next = newNode;
}
printf("请输入要插入的节点数据和key:");
scanf("%d %d", &x, &key);
insert(head, key, x);
printf("插入后的链表为:");
printList(head);
return 0;
}
```
具体思路是在链表中遍历,找到第一个值为key的节点,然后在该节点之前插入一个新的节点,最后输出修改后的链表。需要注意的是,因为这是带头结点的单链表,所以头结点的数据域没有实际意义,不存储数据。
阅读全文