卡码网语言基础课 | 15. 链表的基础操作Ⅲ

目录

一、 插入链表的过程

二、 删除链表的过程

三、 打印链表

3.1 判断节点是否处于链尾

3.2 打印链表

3.3 循环体结束,遍历打印


题目:

请编写一个程序,实现以下链表操作:构建一个单向链表,链表中包含一组整数数据。 

1. 实现在链表的第 n 个位置插入一个元素,输出整个链表的所有元素。
2. 实现删除链表的第 m 个位置的元素,输出整个链表的所有元素。 

要求: 

1. 使用自定义的链表数据结构。
2. 提供一个 linkedList 类来管理链表,包含构建链表、插入元素、删除元素和输出链表元素的方法。
3. 在 main 函数中,创建一个包含一组整数数据的链表,然后根据输入的 n 和 m,调用链表的方法插入和删除元素,并输出整个链表的所有元素。

一、 插入链表的过程

在链表中,具体插入的过程如下:

  • 找到要插入的位置的前一个节点,将之命名为cur, 要插入的位置的下一个节点,将之命名为tmp, 它们之间的关系是cur -> next = tmp
  • 创建一个新的链表newNode, 将curnext指针指向newNode, 即cur -> next = nowNode
  • newNodenext指针指向tmp, 即newNode -> next = tmp

 其相应的代码表示如下:

//创建新的ListNode结构的节点,值为X,并将其地址赋给指针newNode
ListNode *newNode = new ListNode(x);//创建名为tmp的指针,临时存储当前节点cur的下一个节点地址
ListNode *tmp = cur -> next;//将当前节点cur的指针更新指向新节点newNode,并将新节点插入到当前节点后面
cur -> next = newNode;//将新节点newNode的指针设置为指向临时指向节点tmp
newNode -> next = tmp;

二、 删除链表的过程

删除链表则相对简单,只需要找到删除元素的前一个节点cur,并将其指针指向更新为删除元素的下一个节点即可,实现删除操作。具体代码实现如下所示:

//cur表示删除元素的前一个节点名
//cur -> next 表示指针指向当前删除元素
//cur -> next -> next 表示指针指向删除元素的后一个节点cur -> next = cur -> next -> next;

三、 打印链表

3.1 判断节点是否处于链尾

当前节点cur的下一节点 cur -> next,如果为NULL,则为链尾。

//判断是否迭代至链尾while(cur -> next != NULL){}

3.2 打印链表

在循环体内,打印当前节点(cur)的下一节点(cur -> next)的值(val)。并更新当前节点指向下一个节点。

while(cur -> next != NULL){cout << cur -> next -> val << " ";cur = cur -> next;
}

3.3 循环体结束,遍历打印

void printLinklist(ListNode* head) {ListNode* cur = head;while (cur->next != NULL) {cout << cur -> next -> val << " ";cur = cur -> next;}cout << endl;
}

解答:

#include <iostream>
using namespace std;struct ListNode{int val;ListNode *next;ListNode(int x) : val(x), next(nullptr){}
};//打印链表
void printLinklist(ListNode* dummyHead){ListNode* cur = dummyHead;while(cur ->next != NULL){cout << cur -> next -> val << " ";cur = cur -> next;}cout << endl;
}int main(){int k, val;//创建虚拟头结点ListNode* dummyHead = new ListNode(0);cin >> k;int listLen = k; //定义链表长度//定义当前节点cur,并将初始指针指向虚头结点ListNode* cur = dummyHead;for(int i = 0; i < k; i++){cin >> val;ListNode *newNode = new ListNode(val); //构造一个新的节点cur -> next = newNode; //将新的节点接入链表cur = cur -> next; //cur指向下一个节点}//增加节点int s, n, x;cin >> s;while(s--){cin >> n >> x; //输入n和xif(n <= 0 || n > listLen){cout << "Insertion position is invalid." << endl; //输出错误提示continue;}//指针重新指向虚拟头结点,并准备用cur遍历链表cur = dummyHead;//寻找添加节点的位置,i从1开始for(int i = 1; i < n; i++){cur = cur -> next;}//插入节点ListNode* newNode = new ListNode(x);ListNode* tmp = cur -> next;cur -> next = newNode;newNode -> next = tmp;//链表长度+i从1listLen++;//打印链表printLinklist(dummyHead);}//删除节点int l, m;  //注意这里为L的小写,不是数字1cin >> l;    while(l--){cin >> m;if(m <= 0 || m > listLen){//PS:遗漏<0cout << "Deletion position is invalid." << endl;continue;}//指针重新指向虚拟头结点cur = dummyHead;//开始寻找删除节点位置,i从1开始,因节点计数从1开始for(int i = 1; i < m; i++) cur = cur -> next;//删除节点 cur -> next = cur -> next -> next;listLen--; //链表长度-1//如果删除节点后链表为空则不打印if(listLen != 0) printLinklist(dummyHead);}}

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

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

相关文章

python爱心代码高级

在Python中&#xff0c;我们可以使用matplotlib库来创建一个更高级的爱心图形。以下是一个示例&#xff1a; import matplotlib.pyplot as pltimport numpy as npx np.linspace(-2, 2, 1000)y1 np.sqrt(1-(abs(x)-1)**2)y2 -3*np.sqrt(1-(abs(x)/2)**0.5)fig, ax plt.subp…

uni-app 微信小程序 pdf预览

<div click"getPDF">查看体检报告</div>getPDF() {uni.downloadFile({url: ${this.$baseURL}/file/download?id${this.pdfFileId},//编写在线的pdf地址success: function(res) {const filePath res.tempFilePath;uni.openDocument({filePath: filePath…

随时随地,打开浏览器即可体验的在线PS编辑器

即时设计 即时设计是国产的专业级 UI 设计工具&#xff0c;不限平台不限系统&#xff0c;在浏览器打开即用&#xff0c;能够具备 Photoshop 的设计功能&#xff0c;钢笔、矢量编辑、矩形工具、布尔运算等设计工具一应俱全&#xff0c;是能够在线使用的 Photoshop 免费永久工具…

给csgo搬砖新手的十大建议

1、不要参与赌博性质的开箱和炼金&#xff0c;因为真的会上瘾&#xff0c;赚了还好&#xff0c;亏了你得哭。 2、实在想要玩饰品&#xff0c;直接去悠悠有品或者网易buff看价格&#xff0c;底价再砍10元&#xff0c;总会有人愿意卖的。 3、在steam上不要接受陌生人的好友申请&…

解析d3dcompiler_47.dll缺失怎么修复,4种方法修复d3dcompiler_47.dll文件

d3dcompiler_47.dll缺失怎么修复&#xff1f;其实在我们使用计算机操作的过程中&#xff0c;有时会遇到一些由dll文件错误导致的问题&#xff0c;其中d3dcompiler_47.dll丢失就是这样一种。那么究竟d3dcompiler_47.dll缺失是什么意思&#xff0c;为何它会发生丢失&#xff0c;以…

sqli-labs靶场详解(less1-less10)

目录 less-1 less-2 less 3 less 4 less 5 less-6 less-7 less-8 less-9 less-10 1-10关代码分析 less-1 判断注入点 ?id1 正常 ?id1 报错&#xff1a;to use near 1 ?id1\ 报错&#xff1a;to use near 1\ ?id1 and 11 正常 ?id1 and 11 报错&#xff1a;to …

Snagit 2024.0.1(Mac屏幕截图软件)

Snagit 2024是一款屏幕截图工具&#xff0c;可以帮助用户轻松捕获、编辑和分享屏幕截图。该工具在Mac上运行&#xff0c;旨在满足用户对于屏幕截图的各种需求。 Snagit 2024支持屏幕录制功能&#xff0c;可以录制摄像头和麦克风等外部设备&#xff0c;让用户录制更加全面的视频…

干货分享 | TSMaster采样点配置方法与消除错误帧流程

当通讯节点间采样点参数和波特率参数不匹配造成一些错误帧时&#xff0c;我们如何在TSMaster中设置以及调整波特率参数和采样点参数&#xff0c;来减少以及消除总线上出现的错误帧&#xff0c;进一步提高通信质量。本文着重讲解讲解如何借用TSmaster更加便捷地获取相应的采样点…

js 获取数组的最大值与最小值

let arr [1, 2, 5, 8, 10, 100, -1] 1. 使用Math的静态方法max/min Math.max()函数返回给定的一组数中的最大值。 它的语法&#xff1a;Math.max(value1[, value2, ...]) 使用此方法&#xff0c;需要注意&#xff0c;如果没有参数的话&#xff0c;则返回-Infinity。如果有任一…

前端学习系列之html

目录 初识html 发展史 优势 W3C 标准 地址 格式 网页基本标签 标题标签 段落标签 换行标签 水平线标签 字体样式 注释和特殊符号 特殊符号 图像、超链接 图像 常见图像格式 格式 超链接 格式 重要属性 href&#xff1a;规定链接指向的页面的 URL target…

拼多多Temu销量大涨,三个月销量冲上热搜,Temu狂飙既要又要合规性证书

电商巨头拼多多野心之大&#xff0c;大到国内市场装不下。于是乎&#xff0c;跨境业务Temu于2022年下半年在美国上线2023年随着销量的不断狂飙&#xff0c;Temu平台对质量也是提出了卖家证明产品质量过关的合规性证书&#xff01; Temu在 8月的单日GMV达5000万美金&#xff0c…

CSGO搬砖项目靠谱吗?有没有风险?

作为一款fps射击游戏&#xff0c;csgo在近几年可谓是火出圈&#xff0c;作为一款全球竞技游戏&#xff0c;深受玩家喜爱追捧&#xff0c;玩家追求的就是公平公正&#xff0c;各凭本事&#xff0c;像其他游戏可能还会有皮肤等装备属性加成&#xff0c;在csgo里面是不存在的。 纯…