链表实验.

#include<stdio.h>
#include<stdlib.h>// 定义单链表节点结构体
struct Node {int data;struct Node* next;
};struct Node* initList() {struct Node* list = (struct Node*)malloc(sizeof(struct Node));list->data = 0;list->next = NULL;return list;
}void headinsert(struct Node* list) {struct Node* tail = list;int num;printf("请输入整数序列(以0结束):\n");while (1) {scanf("%d", &num);if (num == 0) {break;}struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));newNode->data = num;newNode->next = NULL;tail->next = newNode;tail = newNode;}
}void printList(struct Node* head) {printf("链表的各个元素值为:\n");struct Node* current = head->next; // 跳过头节点while (current) {printf("%d ", current->data);current = current->next;}printf("\n");
}int findPosition(struct Node* head, int x) {int position = 0;head = head->next;while (head != NULL) {position++;if (head->data == x) {return position;}head = head->next;}return 0;
}void insertElement(struct Node* list, int i, int x) {struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));newNode->data = x;newNode->next = NULL;if (i <= 0) {newNode->next = list->next;list->next = newNode;}else {struct Node* current = list;int j = 0;while (current && j < i - 1) {current = current->next;j++;}if (current) {newNode->next = current->next;current->next = newNode;}else {printf("Error: Index out of range\n");free(newNode); // 释放新节点内存}}
}int countnumber(struct Node* head, int x) {int count = 0;head = head->next;while (head != NULL) {if (head->data == x) {count++;}head = head->next;}return count;
}int main() {struct Node* list = initList();headinsert(list);printList(list);int x = 0;printf("请输入要查找的元素的值:");scanf("%d", &x);int position = findPosition(list, x);if (position == 0) {printf("值为%d的元素不在链表中", x);printf("\n");}else{printf("值为%d的元素所在位置为%d", x, position);printf("\n");}int i = 0;int a = 0;printf("请输入要插入元素的值:");scanf("%d", &a);printf("请输入要插入元素的位置:");scanf("%d", &i);insertElement(list, i, a);printList(list);int b = 0;int number = 0;printf("请输入要查找元素个数的值:\n");scanf("%d", &b);number = countnumber(list, b);printf("值为%d的节点的个数为%d", b, number);return 0;
}

1. (算法设计题, 35分)设计算法实现将两个递增的带头结点有序链表合并为一个递增的有序链表,要求结果链表仍然使用原来两个链表的存储空间,表中不允许有重复的数据。

void mergeLists(struct ListNode* head1, struct ListNode* head2) {

    struct ListNode* p1 = head1->next;

    struct ListNode* p2 = head2->next;

    struct ListNode* prev = head1;

    while (p1 && p2) {

        if (p1->val < p2->val) {

            prev->next = p1;

            p1 = p1->next;

        } else if (p1->val > p2->val) {

            prev->next = p2;

            p2 = p2->next;

        } else {

            prev->next = p1; // 保留一个相同的节点

            p1 = p1->next;

            p2 = p2->next;

        }

        prev = prev->next;

    }

    if (p1)

        prev->next = p1;

    if (p2)

        prev->next = p2;

}

初始化指针 p1 和 p2 分别指向两个链表的第一个实际节点。

初始化指针 prev 指向 head1,用于追踪结果链表的最后一个节点。

循环比较两个链表的节点值,将较小的节点接入结果链表,并更新对应链表的指针。

如果两个节点值相同,只保留一个节点。

最后,将剩余未遍历完的链表直接接到结果链表的末尾。算法实现将两个递增的带头结点有序链表合并为一个递增的有序链表,结果链表仍然使用原来两个链表的存储空间,没有重复的数据。

有一个带头结点的单链表L,编写在值为x的结点之后插入m个结点的算法。

void insertAfterX(struct ListNode* head, int x, int m) {

    struct ListNode* current = head->next;

    while (current != NULL && current->val != x) {

        current = current->next;

    }

    int number=0;

    if (current != NULL) {

        for (int i = 0; i < m; i++) {

             printf("请输入要插入节点的值:\n");

             scanf("%d",&number);

            struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));

            newNode->val = number; 

            newNode->next = current->next;

            current->next = newNode;

        }

    } else {

        printf("没有找到值为%d的结点",x);

    }

}

遍历链表,寻找值为 x 的结点。

如果找到了值为 x 的结点,则在其后插入 m 个新的结点。

新插入的结点值可以简单地从 1 开始递增。

如果未找到值为 x 的结点,则输出提示信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特征提取算法

特征提取算法 0. 写在前边1. Harris算法1.1 写在前面1.2 Harris算法的本质1.3 Harris算法的简化 2. Harris3D2.1 Harris3D算法问题定义2.2 Harris3D with intensity2.3 Harris3D without intensity 3. ISS特征点的应用 0. 写在前边 本篇将介绍几种特征提取算法&#xff0c;特征…

笔记 | 软件工程:需求分析

1 需求分析 #需求分析 1.1 需求分析概述 初步软件需求存在的问题&#xff1a;不具体&#xff0c;不清晰&#xff0c;关系不明朗&#xff0c;存在潜在缺陷&#xff0c;没有区分不同软件需求&#xff08;有必要鉴别不同软件需求项的重要性差别&#xff0c;区分不同软件需求的开…

【C语言】——指针八:指针运算笔试题解析

【C语言】——指针八&#xff1a;指针运算笔试题解析 一、题一二、题二三、题三四、题四五、题五六、题六七、题七 一、题一 //程序输出结果是什么 int main() {int a[5] { 1,2,3,4,5 };int* ptr (int*)(&a 1);printf("%d, %d", *(a 1), *(ptr - 1));return…

揭开“栈和队列”的神秘面纱

前言 在线性表中不止有顺序表和链表&#xff0c;今天的主角就如标题所说--->认识栈和队列。把他们俩放一起总结是有原因的&#xff0c;还请看官听我娓娓道来~ 什么是栈&#xff1f; 栈&#xff08;stack&#xff09;是限定仅在表尾进行插入和删除操作的线性表 咱可以把栈理…

Pro版 v3.0首页DIY热区神器,让图片更全能!

Pro版v3.0新增了很多新功能&#xff0c;为了方便大家能快速了解使用&#xff0c;今天&#xff0c;我们就开始来逐步了解这些新功能。 在此次更新中&#xff0c;Pro版的首页DIY功能实现了全新重构升级&#xff0c;新增了DIY热区、视频、排行榜、积分商城、预售、签到组件&#…

【Hadoop技术框架-MapReduce和Yarn的详细描述和部署】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;今天的内容主要是Hadoop的后两个组件&#xff1a;MapReduce和yarn的相关内容。同时还有Hadoop的完整流程。希望对大家有所帮助。感谢大家关注点赞。 &#x1f49e;&#x1f49e;前路漫漫&…

深度学习实战73-基于多模态CLIP模型的实战项目,CLIP模型的架构介绍与代码实现

大家好,我是微学AI,今天给大家介绍一下深度学习实战73-基于多模态CLIP模型的实战项目,CLIP模型的架构介绍与代码实现。多模态CLIP(Contrastive Language-Image Pre-training)模型是一种深度学习模型,其核心设计理念是通过大规模的对比学习训练,实现图像与文本之间的跨模…

【JAVASE】面向对象程序三大特性之一( 封装)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609;\n &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 目标&#xff1a; 1.包的使用 2.static关键字的使用 3.代码…

Python+Vuecil笔记

Nginx 进入目录: C:\nginx-1.20.2\nginx-1.20.2 start nginx 开始 nginx -s stop 停止 nginx -s quit 退出CSS 通过标签去写css 循环展示数据 JS 点击时执行事件 Django 配置media 在seetings里面修改 STATIC_URL /static/ MEDIA_URL /upload/ MEDIA_ROOT os.pat…

windows terminal美化教程

安装terminal 微软商店下载安装terminal 配置文件 进入terminal&#xff0c;打开设置。 {"$schema": "https://aka.ms/terminal-profiles-schema",// global settings"profiles": {// profile settings"defaults": {// default sett…

阿里云服务器租赁一年收费标准

阿里云服务器租用价格表2024年最新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核…

【亲测有效】微信公众号设置菜单栏显示,未开启自定义菜单,微信公众平台自定义菜单接口开发

微信公众平台自定义菜单接口开发 问题:运营人员在设置微信公众号设置菜单栏显示,未开启自定义菜单解决方案(微信公众平台自定义菜单接口开发):自定义菜单-创建接口请求链接完整代码第一步:在WeChat类里添加代码情况一:没有WeChat类情况,如果已有请看情况二情况二:已有…

【系统架构师】-软件架构设计

1、软件架构的概念 架构的本质 1、软件架构为软件系统提供了一个结构、行为和属性的高级抽象。 2、软件架构风格是特定应用领域的惯用模式&#xff0c;架构定义一个词汇表和一组约束。 架构的作用 1、软件架构是项目干系人进行交流的手段。 2、软件架构是可传递和可复用的模型…

番茄 短abogus补环境

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章…

端到端单倍型参考基因组揭示了三倍体香芽蕉型香蕉亚基因组的分歧和疾病抵抗力-文献精读-5

T2T基因组文献分享Telomere-to-telomere haplotype-resolved reference genome reveals subgenome divergence and disease resistance in triploid Cavendish banana 三倍体植物基因组的文献&#xff0c;各位同仁还有什么有特色的基因组评论区留言~ 摘要 香蕉是世界上最重要…

JavaEE——手把手教你实现简单的 servlet 项目

文章目录 一、什么是 Servlet二、创建一个简单的 Servlet 程序1. 创建项目2.引入依赖3. 创建目录4.编写代码5. 打包程序6. 部署7.验证整体过程总结 三、使用 Smart Tomcat 插件简化项目创建四、创建项目时可能遇到的几个问题。 一、什么是 Servlet Servlet 是一种实现 动态页面…

12、最小覆盖子串

如何想到这个解法 问题的特点&#xff1a; 首先&#xff0c;认识到这是一个关于子串的问题&#xff0c;而且需要考虑子串的最小长度。这提示我们可能需要使用一种方式来逐步探索不同的子串。滑动窗口的适用性&#xff1a;滑动窗口是处理子串问题的常用技巧&#xff0c;特别是当…

【图像分割】nnUnetV1与V2的Linux部署与应用命令

以前觉得麻烦&#xff0c;一直没用过nnunet&#xff0c;虽然知道它很火&#xff0c;最近一个契机&#xff0c;部署使用了一下nnunet&#xff0c;记录一下其部署和使用的方法与命令。 1、部署 首先&#xff0c;我有一个环境&#xff0c;这个环境可以是以前就有的&#xff0c;也可…

1.c++入门(命名空间、缺省参数、函数重载、引用、内联函数、for循环、auto关键字、指针空值nullptr)

1.c的第一个程序 // 方法一 #include<iostream>// namespace为命名空间的关键字&#xff0c;std为空间名&#xff1b; C标准库的东西放进std命名空间 using namespace std; int main() {cout << "hello world" << endl;return 0; }// 方法二 #in…

YOLOv8的多分类模型如何计算准确率(Accuracy)、精确率(Precision)、召回率(recall)和F1-Score模型评估参数

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…