写出按正位序建立一个单链表的算法(c语言)
时间: 2024-09-23 07:08:21 浏览: 39
在C语言中,我们可以创建一个函数来按照正序(递增顺序)插入元素到链表中。这里是一个简单的算法示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建新节点并添加到链表尾部
Node* insertSorted(Node* head, int value) {
if (head == NULL || head->data > value) { // 如果链表为空或者新值小于当前头结点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = head;
head = newNode;
} else { // 否则遍历链表找合适位置插入
Node* curr = head;
while (curr->next != NULL && curr->next->data < value) {
curr = curr->next;
}
curr->next = (Node*)malloc(sizeof(Node)); // 插入节点
curr->next->data = value;
curr->next->next = NULL; // 更新指针指向新插入的位置
}
return head;
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Node* head = NULL;
// 插入一些数字,例如正序排序的数列 [1, 2, 3, 4, 5]
head = insertSorted(head, 1);
insertSorted(head, 2);
insertSorted(head, 3);
insertSorted(head, 4);
insertSorted(head, 5);
// 打印链表验证结果
printList(head);
return 0;
}
```
这个程序首先检查链表是否为空或者新值应该作为头节点。然后它会遍历链表找到第一个大于或等于新值的位置,并将新节点插入其中。最后,`main`函数用于测试链表的构建。
阅读全文