写一函数在带头结点的单链表llist中p指向的结点前边插入值为×的新结点,返 回成功与否的标志
时间: 2024-10-14 17:11:32 浏览: 27
SingleLinkList_python数据结构单链表函数_
在带头结点的单链表 `llist` 中,在指针 `p` 指向的节点前面插入一个新节点,你可以编写一个如下的函数:
```c++
#include <stdbool.h>
// 定义链表节点结构体
struct Node {
int value;
struct Node* next;
};
// 函数声明,返回布尔值表示是否插入成功
bool insertBefore(struct Node** p, int x) {
// 创建新节点
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (!newNode) { // 如果内存分配失败,返回false
printf("Memory allocation failed.\n");
return false;
}
// 设置新节点的值
newNode->value = x;
// 如果链表为空或*p为头节点
if (*p == NULL || (*p)->next == NULL) {
newNode->next = *p; // 新节点作为新的头节点
*p = newNode; // 更新头节点指针
} else {
newNode->next = (*p)->next; // 新节点插入到当前节点之后
(*p)->next = newNode; // 更新原节点的下一个节点指针
}
return true; // 插入成功,返回true
}
// 示例用法
void main() {
// 初始化链表...
struct Node* head = ...;
struct Node* p = ...; // 指向需要插入前的节点
bool success = insertBefore(&head, 0); // 插入操作
if (success) {
printf("Insertion successful.\n");
} else {
printf("Insertion failed.\n");
}
}
```
这个函数首先检查是否有足够的内存创建新节点,然后根据链表的状态决定将新节点插入的位置,并更新相关的指针。如果插入成功,函数返回 `true`;否则返回 `false`。
阅读全文