已知单链表A有序的,用 C 语言 设计一个算法实现:在单链表A中插入一个元素,插入后保持原有的顺序
时间: 2024-10-26 16:16:49 浏览: 24
LinkList单文件_一个简单单链表_
要在已排序的单链表A中插入一个元素并保持原有的顺序,可以采用二分查找法找到新元素应该插入的位置,然后按照常规的链表操作插入节点。以下是C语言的一个基本算法描述:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 插入函数
void insertInOrder(ListNode** head, int val) {
// 创建新的节点
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = NULL;
// 如果链表为空或新值小于头节点
if (*head == NULL || val <= (*head)->val) {
newNode->next = *head;
*head = newNode;
return;
}
// 二分查找插入位置
ListNode* current = *head;
while (current->next != NULL && current->next->val > val) {
current = current->next;
}
// 将新节点插入到当前节点之后
newNode->next = current->next;
current->next = newNode;
}
// 测试函数
void printList(ListNode* head) {
while (head != NULL) {
printf("%d -> ", head->val);
head = head->next;
}
printf("NULL\n");
}
int main() {
// 初始化链表示例
ListNode* head = NULL;
insertInOrder(&head, 4); // 插入4
insertInOrder(&head, 2); // 插入2
insertInOrder(&head, 6); // 插入6
// 打印链表验证结果
printList(head);
return 0;
}
```
当运行这个程序,它将创建一个有序的链表 [2, 4, 6]。
阅读全文