用C语言,创建一个内容为123456789 的带头单链表list,并写一函数,在带头结点的单链表 llist 中, p 指向的结点前边插入值为 x 的新结点,返回成功与否的标志。
时间: 2024-10-14 15:05:52 浏览: 29
单链表完整程序
4星 · 用户满意度95%
在C语言中,我们可以使用结构体表示链表节点,同时为链表设置一个头结点。以下是一个简单的示例,包括如何创建链表、插入新节点以及检查操作是否成功。
首先,我们需要定义链表节点结构体 `Node` 和链表头结点 `LinkedList`:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
struct Node {
int data;
struct Node* next;
};
// 定义链表头结点
typedef struct Node LinkedList;
// 插入新节点函数
int insertBefore(struct Node** head_ref, int x, int value) {
// 如果链表为空或p已经是头结点
if (*head_ref == NULL || (*head_ref)->data == value) {
printf("Insertion failed: No element found or trying to insert at beginning.\n");
return 0; // 返回失败标志
}
// 新建一个节点
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return 0; // 返回失败标志
}
newNode->data = x;
newNode->next = (*head_ref); // 将新节点连接到p之前
// 更新头结点的下一个指向新节点
(*head_ref) = newNode;
return 1; // 成功标志
}
// 创建链表并初始化
LinkedList* createLinkedList() {
LinkedList* head = (LinkedList*)malloc(sizeof(LinkedList));
if (head == NULL) {
printf("Memory allocation failed while creating linked list.\n");
return NULL;
}
head->data = 123456789;
head->next = NULL;
return head;
}
// 打印链表
void printLinkedList(LinkedList* head) {
LinkedList* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
LinkedList* list = createLinkedList();
if (list != NULL) {
printLinkedList(list); // 输出初始链表
struct Node* p = &list->next; // 假设我们要在第一个元素前插入
if (insertBefore(&list, 0, p->data)) { // 插入0
printLinkedList(list); // 打印更新后的链表
} else {
printf("Insertion unsuccessful.\n");
}
} else {
printf("Failed to create linked list.\n");
}
return 0;
}
```
在上述代码中,`createLinkedList` 函数用于创建一个包含数字 123456789 的链表。`insertBefore` 函数会在指定位置 `p`(在这里是第一个元素)前面插入新节点。如果插入成功,它将返回 1,否则返回 0。主函数中展示了如何调用这些功能。
阅读全文