首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

以升序将数字插入链表的C函数

可以使用以下方式实现:

代码语言:txt
复制
#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是链表的长度。它适用于需要维护有序链表的场景,比如对一系列数字进行排序或者实现优先级队列等。对应的腾讯云相关产品和产品介绍链接地址暂时无法提供,因为问题中要求不能提及特定的云计算品牌商。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券