可以使用以下方式实现:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
// 创建新节点
struct ListNode* createNode(int val) {
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 插入数字到链表
struct ListNode* insert(struct ListNode* head, int val) {
struct ListNode* newNode = createNode(val);
// 头节点为空,直接将新节点作为头节点
if (head == NULL) {
head = newNode;
return head;
}
// 头节点大于新节点,将新节点作为头节点
if (head->val > val) {
newNode->next = head;
head = newNode;
return head;
}
struct ListNode* curr = head;
// 遍历链表找到合适的位置插入新节点
while (curr->next != NULL && curr->next->val < val) {
curr = curr->next;
}
newNode->next = curr->next;
curr->next = newNode;
return head;
}
// 打印链表
void printList(struct ListNode* head) {
struct ListNode* curr = head;
while (curr != NULL) {
printf("%d ", curr->val);
curr = curr->next;
}
printf("\n");
}
int main() {
struct ListNode* head = NULL;
// 插入数字到链表
head = insert(head, 5);
head = insert(head, 2);
head = insert(head, 7);
head = insert(head, 1);
head = insert(head, 9);
// 打印链表
printList(head);
return 0;
}
这个C函数实现了将数字按升序插入链表的功能。首先定义了链表节点的结构体,包含一个整数值和指向下一个节点的指针。然后定义了创建新节点的函数createNode
,用于动态分配内存并初始化节点的值和指针。接下来是插入数字到链表的函数insert
,它接收链表的头节点和要插入的数字作为参数。函数首先创建一个新节点,然后根据不同情况进行插入操作。如果头节点为空,直接将新节点作为头节点;如果头节点的值大于新节点的值,将新节点作为头节点;否则,遍历链表找到合适的位置插入新节点。最后,定义了打印链表的函数printList
,用于遍历链表并打印节点的值。在main
函数中,演示了将数字5、2、7、1、9按升序插入链表,并打印链表的结果。
这个函数的优势是可以方便地将数字按升序插入链表,时间复杂度为O(n),其中n是链表的长度。它适用于需要维护有序链表的场景,比如对一系列数字进行排序或者实现优先级队列等。对应的腾讯云相关产品和产品介绍链接地址暂时无法提供,因为问题中要求不能提及特定的云计算品牌商。
领取专属 10元无门槛券
手把手带您无忧上云