增删改查有序链表

#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构体
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 头指针(全局变量)
Node* head = NULL;

插入

void insertSorted(int value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (!newNode) {
        printf("内存分配失败!\n");
        exit(1);
    }
    newNode->data = value;
    newNode->next = NULL;

    // 情况1:链表为空或新值小于等于头节点
    if (head == NULL || value <= head->data) {
        newNode->next = head;
        head = newNode;
        return;
    }

    // 情况2:寻找插入位置
    Node* current = head;
    while (current->next != NULL && current->next->data < value) {
        current = current->next;
    }
    newNode->next = current->next;
    current->next = newNode;
}

void deleteNode(int value) {
    if (head == NULL) {
        printf("链表为空!\n");
        return;
    }

    // 处理头节点是要删除的节点的情况
    if (head->data == value) {
        Node* temp = head;
        head = head->next;
        free(temp);
        return;
    }

    Node* current = head;
    while (current->next != NULL && current->next->data != value) {
        current = current->next;
    }

    if (current->next == NULL) {
        printf("未找到值为 %d 的节点!\n", value);
        return;
    }

    // 找到目标节点并删除
    Node* temp = current->next;
    current->next = temp->next;
    free(temp);
}

void updateNode(int oldValue, int newValue) {
    Node* target = searchNode(oldValue);
    if (target == NULL) {
        printf("未找到值为 %d 的节点!\n", oldValue);
        return;
    }
    target->data = newValue;
    printf("已将 %d 修改为 %d\n", oldValue, newValue);
}

Node* searchNode(int value) {
    Node* current = head;
    while (current != NULL) {
        if (current->data == value) {
            return current; // 返回找到的节点指针
        }
        current = current->next;
    }
    return NULL; // 未找到
}

打印链表

void printList() {
    Node* current = head;
    printf("链表内容:");
    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

完整测试代码

int main() {
    // 初始化链表
    head = NULL;

    // 插入测试
    insertSorted(5);
    insertSorted(3);
    insertSorted(7);
    insertSorted(1);
    insertSorted(9);
    printList(); // 输出: 1 -> 3 -> 5 -> 7 -> 9 -> NULL

    // 查找测试
    Node* found = searchNode(5);
    if (found) {
        printf("找到值为 5 的节点。\n");
    } else {
        printf("未找到值为 5 的节点。\n");
    }

    // 修改测试
    updateNode(5, 6);
    printList(); // 输出: 1 -> 3 -> 6 -> 7 -> 9 -> NULL

    // 删除测试
    deleteNode(3);
    printList(); // 输出: 1 -> 6 -> 7 -> 9 -> NULL

    // 删除不存在的节点
    deleteNode(10); // 输出: 未找到值为 10 的节点!

    // 清空链表
    while (head != NULL) {
        deleteNode(head->data);
    }
    printList(); // 输出: 链表内容:NULL

    return 0;
}

全部评论
考虑南京OD的宝子们看过来,你就是我们要找的人,一对一指导,可私信
1 回复 分享
发布于 08-11 19:07 贵州

相关推荐

08-13 16:30
已编辑
立教大学 C++
为了公司发的那点米绞劲脑汁抠出来这么点字出来@腾讯招聘&nbsp;@腾讯校园招聘。本来想开头抒点情的结果大脑语言功能萎缩憋出来一点小学生流水账给我自己都气笑了。腾讯这里超好的这里各个都是人才,说话又好听,我超喜欢在这里的。呐,偶捏该,能和我打一辈子工吗。发癫部分结束了,给大伙来点想看的东西(指面经)----------------------------------------------一下是我去年腾讯的面经-----------------------------------------------1.&nbsp;项目以及实习经历2.&nbsp;场景题:场景中有一百万个面的物体一万个,有什么方法能优化渲染流程3.&nbsp;场景题:&nbsp;2.中的物体在大世界中放置的比较稀疏的话,还可以有什么策略4.&nbsp;场景题:大世界区块加载有什么策略5.&nbsp;场景题:碰撞检测有什么优化方法6.&nbsp;场景题:在开放世界中一条及远距离的射线的碰撞检测有什么优化策略7.&nbsp;场景题:在大世界中很多条很短光线的碰检测有什么优化策略8.&nbsp;有什么碰撞检测的加速结构9.&nbsp;kd树和bvh树相比各有什么优劣10.&nbsp;手撕:实现一个单例模式,这个实现有什么问题11.手撕:计算a^n&nbsp;mod&nbsp;1000000其中a&lt;10^9&nbsp;n&nbsp;&lt;&nbsp;10^5。(追问优化到O(log&nbsp;n)怎么做,优化到O(1)怎么做)12.手撕:斐波那契数列(我的实现是尾递归优化后的O(n)实现,面试官问我怎么优化,实在找不到还有什么优化空间)13.&nbsp;反问--------------------------------以下是我的在面试过程中遇到的一些高频问题以及解答---------------------------------1.&nbsp;C++:1.1.&nbsp;C++构造函数能否为虚函数?1.2&nbsp;析构函数与构造函数的区别?1.3&nbsp;C++的构造函数中能否使用throw1.4&nbsp;C++的优先队列底层是怎么实现的2.&nbsp;Python2.1&nbsp;Python的装饰器2.2&nbsp;Python的GC机制3.&nbsp;设计模式3.1&nbsp;单例模式有几种实现方式4.&nbsp;Unity4.1&nbsp;Unity的几种Update函数,各有什么作用5.&nbsp;图形5.1&nbsp;如何光栅化一个三角形5.2&nbsp;&nbsp;给定法线和入射方向如何计算反射方向5.3&nbsp;解释一下PBR模型5.4&nbsp;什么是Early-Z5.5&nbsp;移动端GPU架构&nbsp;TBR/TBDR6.&nbsp;物理模拟:6.1&nbsp;什么是CCD?----------------------------------------------------最后的最后-------------------------------------------------------------☝🤓&nbsp;对了,说到腾讯,腾讯2026年校招正式启动,超多岗位超多机会,欢迎带火踊跃投递。扫描下方二维码,性感主包在线查进度(想要内推到具体部门的不要扫码,先私聊)
帮你内推|腾讯 校招
点赞 评论 收藏
分享
08-13 07:56
浙江大学 C++
目前在联想北京总部已经实习半个月啦,岗位是产品运营助理,是在&nbsp;IDG显示器的&nbsp;operation组。&nbsp;闲来无事,把自己这段时间的实习心得总结一下,也可以给想来联想的同学们一些参考。&nbsp;总体来说,联想给人的感觉真的很好,不管是氛围方面还是环境方面。&nbsp;😝环境:可能是由于联想会有很多国外业务,所以工作环境其实有点像外企的感觉。我是在北京的联想总部,整整两栋大楼,地方非常大,周围是百度新浪腾讯。办公楼里面会有赛百味、&nbsp;costa、罗森等等,居然还有做美甲的地方,第一天看见的时候惊呆了。东区经常会有一些活动,在西区的我有、、羡慕&nbsp;~东西区各有一个食堂,不过貌似东区的更好吃一点,种类挺多的基本什么都有,早上和下午也会有饭。氛围:联想的工作氛围真的是很棒了,每个人都会有英文名,平常和&nbsp;leader说话什么的也是直接叫英文名,直接避免了叫什么哥什么姐的尴尬!并且管理非常扁平化,没有什么不舒服的上下级关系。据我所观察,组里的姐姐们经常会请年假出去旅游,毕竟年假&nbsp;15&nbsp;天,和周末算一起每年可以旅游好几次了。联想是没有加班文化的,妥妥的&nbsp;965,&nbsp;leader在每天&nbsp;6点也准时下班。不用打卡,上下班时间自己控制很随意&nbsp;~(这是我最喜欢的一点了)内容:联想的产品基本是实体产品(PC显示器等),所以和其他互联网企业非常不同;并且联想的业务遍布全球,业务线非常多,所涉及的PC相关知识也比较复杂,短期内其实没办法懂一些业务,我现在才刚刚算是弄明白了一些概念。&nbsp;其实我另一个幸福感很高的原因是,我每天通勤只用15min哦,因为就住在班车点旁边,出了小区就坐班车,真的很爽了联想集团26届秋招网申开启【招聘岗位】产品与项目、技术、市场与销售、职能、供应链、设计等【20+工作地点】北京、上海、深圳、天津、武汉、成都、广州、杭州、南京、厦门、长沙、郑州、济南、沈阳、哈尔滨、昆山、南宁、东京、莫里斯维尔等【20+工作地点】北京、上海、深圳、天津、武汉、成都、广州、杭州、南京、厦门、长沙、郑州、济南、沈阳、哈尔滨、昆山、南宁、东京、莫里斯维尔等【投递链接】https://talent.lenovo.com.cn/home【内推码】2026XZLMCX(简历优先筛选,后续有疑问或者流程问题欢迎随时联系)【内推入口】在&amp;quot;联想校招官网&amp;quot;投递校招职位,创建简历时&amp;quot;从哪儿获知招聘信息&amp;quot;选择&amp;quot;联想员工推荐&amp;quot;并且输入推荐人ITcode:2026XZLMCX大家投递完可以在评论区打上姓名缩写+岗位(比如PM+LJJ),我来确认有没有内推成功喽
联想公司福利 1276人发布
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务