写出在单链表上结点的数据域为X的结点之前插入一个新结点的程序用c语言
时间: 2024-10-18 07:10:00 浏览: 23
在C语言中,为了在单链表上结点的数据域为X的节点之前插入一个新节点,首先需要创建一个新的节点,然后找到数据域为X的节点以及它的前一个节点,最后将新节点链接到它们之间。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 插入函数
void insertBeforeX(Node** head, int target, int value) {
// 创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
// 检查链表是否为空
if (*head == NULL) {
*head = newNode;
return;
}
// 遍历查找目标节点
for (Node* current = *head; current != NULL && current->data != target; current = current->next) {}
// 如果找到目标节点,则插入新节点
if (current != NULL) {
newNode->next = current->next;
current->next = newNode;
} else {
printf("Target node with data %d not found.\n", target);
}
}
// 测试函数
int main() {
Node* head = NULL;
// 初始化链表
// 示例:头节点数据域为0,之后有数据域为X的节点
head = createListWithX(0); // 假设createListWithX函数已存在
// 插入新节点,例如在第一个X之前
insertBeforeX(&head, X, 5); // X是你想要查找的数据
// 打印链表检查结果
printList(head);
return 0;
}
// 其他辅助函数如创建节点、打印链表等,此处省略
```
在这个例子中,`insertBeforeX` 函数接收链表头部指针 `head`,目标值 `target` 和新插入的值 `value`。记得在实际项目中添加必要的辅助函数,如创建链表和打印链表的函数。
阅读全文