链表实验.

#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…

Python基于Tkinter的加法游戏

定制魏:QTWZPW,获取更多源码等 目录 题目概述 详细设计 函数设计 总体设计 重要代码

责任链模式详解+代码案例

责任链设计模式 定义&#xff1a; 又名职责链模式&#xff0c;为了避免请求发送者与多个请求处理者耦合在一起&#xff0c;将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链&#xff1b;当有请求发生时&#xff0c;可将请求沿着这条链传递&#xff0c;直到…

算法|ss dfsbfs

200.岛屿数量—1207.课程表—1547.省份数量695.岛屿的最大面积17.15.最长单词 200.岛屿数量—1 /*** param {character[][]} grid* return {number}*/ var numIslands function (grid) {let ans 0;let m grid.length;let n grid[0].length;const dirs [[1, 0],[-1, 0],[…

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

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

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

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

python类中的__call__函数有什么用法?

在 Python 中,如果一个类实现了 __call__ 方法,那么这个类的实例对象就可以像函数一样被调用。当调用一个实现了 __call__ 方法的对象时,实际上会调用这个对象的 __call__ 方法。 __call__ 方法的主要作用是让对象具有函数的行为,可以在调用对象时执行一些操作。这对于需要…

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

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

mysql学习笔记NO.1

MySQL入门笔记 1.MySQL 5.7 安装配置 下载MySQL 5.7安装包并进行安装。配置MySQL的环境变量。启动MySQL服务。 2.命令行连接到MySQL 打开命令行终端。输入以下命令连接到MySQL服务器&#xff1a; mysql -u 用户名 -p 输入密码以登录MySQL服务器。​​​​​​​ 3.SQLyog 下载并…

蓝桥杯刷题-07-整数删除-暴力

给定一个长度为 N 的整数数列&#xff1a;A1, A2, . . . , AN。你要重复以下操作 K 次&#xff1a; 每次选择数列中最小的整数&#xff08;如果最小值不止一个&#xff0c;选择最靠前的&#xff09;&#xff0c;将其删除。并把与它相邻的整数加上被删除的数值。输出 K 次操作后…

深度学习实战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核…

Docker设置时区

Dockerfile中设置时区的方法 # 设置环境变量TZ ENV TZAsia/Shanghai# 配置时区 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone创建容器时设置时区 将宿主机与容器的时间进行挂载&#xff0c;直接使用宿主机的时区 -v /etc/lo…

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

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

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

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