用c语言编写在非递减有序链表中插入一个元素(整型),使链表元素仍有序的函数(必须采用函数实现,否则不算成绩),并利用该函数建立一个非递减有序单向链表,之后输出这个有序的单链表。
时间: 2024-10-14 12:07:44 浏览: 26
在C语言中,我们可以创建一个结构体表示链表节点,并实现一个函数`insert_sorted`来插入新元素保持链表的非递减顺序。首先,我们定义链表节点的结构体`ListNode`:
```c
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
```
接下来,编写`insert_sorted`函数:
```c
// 插入排序函数
void insert_sorted(ListNode** head, int val) {
ListNode* new_node = (ListNode*)malloc(sizeof(ListNode));
new_node->val = val;
new_node->next = NULL;
if (*head == NULL || (*head)->val >= val) {
new_node->next = *head;
*head = new_node;
} else {
ListNode* current = *head;
while (current->next != NULL && current->next->val < val) {
current = current->next;
}
new_node->next = current->next;
current->next = new_node;
}
}
```
然后,我们可以创建一个链表并插入一些元素:
```c
// 创建一个非递减有序链表
void build_sorted_list(ListNode** head) {
*head = NULL;
// 示例插入操作
insert_sorted(head, 5);
insert_sorted(head, 2);
insert_sorted(head, 8);
insert_sorted(head, 1);
insert_sorted(head, 9);
}
// 打印链表
void print_list(ListNode* node) {
while (node != NULL) {
printf("%d -> ", node->val);
node = node->next;
}
printf("NULL\n");
}
int main() {
ListNode* head = NULL;
build_sorted_list(&head);
print_list(head); // 输出:1 -> 2 -> 5 -> 8 -> 9 -> NULL
return 0;
}
```
在这个例子中,`build_sorted_list`函数初始化了一个空链表,然后添加了一些元素,确保它们总是按照非递减的顺序插入。`print_list`函数用于遍历链表并打印其内容。
阅读全文