升序链表的插入c语言
时间: 2024-11-22 15:10:38 浏览: 5
在C语言中,升序链表的插入操作通常是递增地将新元素添加到已排序的链表中。这里有一个简单的示例,展示如何插入一个新节点保持链表的升序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 插入函数,新节点值小于当前节点则插入
void insert(Node** head, int value) {
// 创建新节点
Node* newNode = (Node*) malloc(sizeof(Node));
if (newNode == NULL) { // 内存分配失败处理
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = *head; // 新节点指向头节点
// 遍历链表,找到正确的位置插入
Node* current = *head;
while (current != NULL && current->data < value) {
current = current->next;
}
if (current == NULL) { // 如果遍历结束,说明链表为空或值比所有节点都大,放在末尾
*head = newNode;
} else {
newNode->next = current->next; // 插入节点到正确位置
current->next = newNode;
}
}
// 测试函数
int main() {
Node* head = NULL; // 初始化链表头部为空
insert(&head, 5); // 插入5
insert(&head, 2);
insert(&head, 8);
// 打印链表验证
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
return 0;
}
```
在这个例子中,`insert` 函数首先创建一个新节点,然后遍历链表找到合适的位置,最后将新节点插入链表中。如果新节点应该插入在链表的开始(即所有元素都小于它),则将新节点设置为头节点。
阅读全文