用C语言编写一个函数实现:向降序排列的单向链表中增加一个节点,使之依然保持降序排列。
时间: 2024-10-21 07:02:49 浏览: 27
C语言实现输出链表中倒数第k个节点
5星 · 资源好评率100%
在C语言中,我们可以创建一个链表节点结构,并为其添加一个插入元素的方法,使得新插入的节点能够保持链表的降序顺序。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 向降序链表中插入节点
void insertInDescendingOrder(Node** head, int value) {
// 如果链表为空或新值大于当前头节点
if (*head == NULL || value > (*head)->data) {
// 创建新的节点并设置其数据和下一个指针
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode; // 新节点成为新的头节点
} else {
// 从头节点开始遍历链表,找到合适的位置插入
for (Node* current = *head; current->next != NULL && current->next->data < value; current = current->next) {}
// 插入新节点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = current->next;
current->next = newNode;
}
}
// 打印链表(用于测试)
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
int main() {
Node* head = NULL; // 初始链表为空
// 测试插入操作
insertInDescendingOrder(&head, 5); // [5]
insertInDescendingOrder(&head, 10); // [10, 5]
insertInDescendingOrder(&head, -1); // [-1, 10, 5]
printList(head); // 输出:-1 -> 10 -> 5 -> NULL
return 0;
}
```
这个函数`insertInDescendingOrder`首先检查是否需要在头部插入,或者找到现有链表中的适当位置插入新节点,以保持降序排序。
阅读全文