C++面试——链表

C++面试题-链表栈二叉树数据结构 一、单链表 目录 1.单链表反转 2.找出单链表的倒数第4个元素 3.找出单链表的中间元素 4.删除无头单链表的一个节点 5.两个不交叉的有序链表的合并 6.有个二级单链表,其中每个元素都含有一个指向一个单链表的指针。写程序把这个二级链表称一级单链表。 7.单链表交换任意两个元素(不包括表头) 8.判断单链表是否有环?如何找到环的“起始”点?如何知道环的长度? 9.判断两个单链 阅读详情

链表逆序

#include<iostream>
using namespace std;

struct ListNode {
	int data;
	ListNode* next;
};

ListNode * reverseList(ListNode* head) {
	ListNode *p, *q, *t=nullptr;
	p = head;
	if (p->next == NULL || p->next->next == NULL) {
		return head;
	}
	p = head->next;
	q = head->next->next;
	while (q != nullptr) {
		t = q->next;
		q->next = p;
		p = q;
		q = t;
	}
	head->next->next = nullptr;
	head->next = p;
	return head;
}

void printList(ListNode *head) {
	head = head->next;
	while (head != nullptr) {
		cout << head->data << " ";
		head = head->next;
	}
	cout << endl;
}

int main() {
	ListNode *head=new ListNode;
	head->data = -1;
	head->next = nullptr;
	int x;
	ListNode*p;
	p = head;
	cin >> x;
	while (x!=-1) {
		ListNode *q = new ListNode;
		q->data = x;
		q->next = NULL;
		p->next = q;
		p = q;
		cin >> x;
	}
	printList(head);
	printList(reverseList(head));
	return 0;
}

合并两个有序链表
递归法

#include<iostream>
using namespace std;

struct ListNode {
	int data;
	ListNode* next;
};

ListNode*  createList(ListNode* head) {
	int x;
	ListNode *p, *q = nullptr;
	p = head;
	cin >> x;
	while (x != -1) {
		q = new ListNode;
		q->data = x;
		q->next = nullptr;
		p->next = q;
		p = q;
		cin >> x;
	}
	return head;
}

void printList(ListNode *head) {
	head = head->next;
	while (head != nullptr) {
		cout << head->data << " ";
		head = head->next;
	}
	cout << endl;
}

ListNode* mergeTwoLists(ListNode* L1,ListNode* L2) {
	if (L1 == nullptr)
		return L2;
	if (L2 == nullptr)
		return L2;
	if (L1->data < L2->data) {
		L1->next = mergeTwoLists(L1->next, L2);
		return L1;
	}
	else
	{
		L2->next = mergeTwoLists(L1, L2->next);
		return L2;
	}
}

int main() {
	ListNode *head=new ListNode;
	head->data = -1;
	head->next = nullptr;	
	head = createList(head);
	printList(head);
	printList(reverseList(head));
	ListNode *L1 = new ListNode;
	ListNode *L2 = new ListNode;
	L1 = createList(L1);
	L2 = createList(L2);
	printList(mergeTwoLists(L1, L2)->next);
	return 0;
}

合并两个有序链表
非递归

#include<iostream>
using namespace std;


//链表节点
struct ListNode {
	int data;
	ListNode* next;
};

//打印链表
void printList(ListNode* head) {
	head = head->next;
	while (head != nullptr) {
		cout << head->data << " ";
		head = head->next;
	}
	cout << endl;
}

//构建链表
ListNode* createList(ListNode* head) {
	ListNode *p, *q;
	int x;
	p = head;
	cin >> x;
	while (x != -1) {
		q = new ListNode;
		q->data = x;
		q->next = nullptr;
		p->next = q;
		p = q;
		cin >> x;
	}
	return head;
}

//链表逆序
ListNode* reverseList(ListNode *head) {
	ListNode *p = head;
	ListNode *q, *t=nullptr;
	if (p->next == nullptr || p->next->next == nullptr)
		return head;
	p = head->next;
	q = head->next->next;
	while (q != nullptr) {
		t = q->next;
		q->next = p;
		p = q;
		q = t;
	}
	head->next->next = nullptr;
	head->next = p;
	return head;
}

//合并链表
ListNode* mergeTwoLists(ListNode* L1, ListNode* L2) {
	if (L1 == nullptr)
		return L2;
	if (L2 == nullptr)
		return L1;
	if (L1->data < L2->data) {
		L1->next = mergeTwoLists(L1->next, L2);
		return L1;
	}
	else {
		L2->next = mergeTwoLists(L1, L2->next);
		return L2;
	}
}

int main() {
	ListNode *head = new ListNode;
	head->data = -1;
	head->next = nullptr;
	head = createList(head);
	printList(head);
	head = reverseList(head);
	printList(head);
	ListNode *L1, *L2;
	L1 = new ListNode;
	L2 = new ListNode;
	L1 = createList(L1);
	L2 = createList(L2);
	printList(mergeTwoLists(L1, L2)->next);
}
面试必备:C++链表常见操作与高频面试题解析(附代码) 本文系统解析了C++链表在技术面试中的核心操作与高频题目,涵盖节点创建、哨兵节点使用、链表反转、合并、环检测等关键知识点,并提供了详细的代码示例和边界条件处理技巧,旨在帮助开发者扎实掌握链表数据结构,提升面试表现。 阅读详情

相关推荐

C++面试宝典第4题:合并链表

链表是一种常见的数据结构,它通过指针链接一系列的节点。通过这道题,我们学习了链表的数据结构,以及链表合并的操作。另外,我们还为你留了一些课后的拓展作业,快来试一试吧!1、给定一个单向链表,判断链表中是否有环。2、给定一个单向链表的头节点,写一个函数将其反转。

hope_wisdom的技术博客 943

C++面试总结之算法(三):链表

1. 怎样判断一个链表有环 (1)最常用方法 定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追上了走得慢的指针,那么链表就是环形链表;如果走得快的指针走到了链表的末尾(next指向NULL)都没有追上第一个指针,那么链表就不是环形链表。 boolIsLoop(NODE*head){//假设为带头节点的单链表 if(he...

lxin_liu的博客 377

c/c++每日面试之练习链表

【代码】c/c++每日面试之练习链表。

我不是码农的博客~~~ 248

C/C++面试可能会问一:静态链表与动态链表

C/C++面试可能会问一:静态链表与动态链表

xiaoyaolangwj的博客 319

常见的链表面试题大汇总

常见的链表面试题大汇总: 1,创建一个链表结点 2,遍历链表中的所有结点 3,倒序打印链表 4,往链表末尾添加结点 5,往链表前端添加结点, 6,获取链表的节点数目 7,销毁链表 8,求链表中倒数第K个节点 9,反转链表 10,查找链表中间节点 11,判断链表是否有环 12,判断链表是否有环,并返回环上的节点数目

深度强化学习系列(13): 策略梯度(Policy Gradient)

对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。 回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为 π:s→aπ:s→a\pi : s \to a, 我们用ττ\tau 表示状态s到最后一个状态的一个序列,表示为: τ:st...

深度强化学习(DeepRL)探索博客 4641

嵌入式面试题 C/C++ 链表面试题总结

创建2个链表,对两个链表对应位进行相加。

weixin_49303682的博客 683

LibreNMS实战:5分钟搞定Docker部署与中文配置(附常见问题排查)

本文详细介绍了如何使用Docker在5分钟内快速部署LibreNMS,并完成中文界面优化。从环境准备到容器启动,再到中文语言包安装和系统配置调整,提供了完整的实战指南。同时,文章还包含常见问题排查和性能调优建议,帮助用户高效搭建网络监控系统。

e1f2g的博客 1279

C++关于链表操作的八个常见面试题

1、从链表的末尾添加节点 2、删除链表节点 3、链表中倒数第K个节点 4、反转链表 5、从尾到头打印链表 6、合并两个排序的链表 7、两个链表的第一个公共节点 8、判断两个链表是否有环相关问题 struct ListNode{int m_data;ListNode *m_pNext;}; 一、从链表的末尾添加节点: ListNode *AddToTail(ListNo...

weixin_30509393的博客 305

手把手复现金蝶云星空V8.1文件上传漏洞(附完整POC与修复方案)

本文深度解析金蝶云星空V8.1文件上传漏洞,提供详细的漏洞复现步骤与完整POC,涵盖技术原理、测试环境搭建及验证流程。同时给出多维防护方案,包括官方补丁部署、临时缓解措施和长期安全加固建议,帮助企业有效防范任意文件上传风险。

weixin_30505225的博客 179

利用PV操作控制进程的并发进行---经典题解

前趋图 先理清楚前趋图中的逻辑关系:P1没有前驱,P2的前驱是P1,P3的前驱是P1、P2,P4的前驱是P2,P5的前驱是P3、P4。 前驱就是指只有在前驱进程完成后,该进程才能开始执行。由图可知,这里进程之间有6条有向弧,分别表示为P1→P2,P1→P3,P2→P3,P2→P4,P3→P5,P4→P5, 各个进程间的逻辑关系,那么我们需要设定6个信号量(S1、S2、S3、S4、S5、S6),利用PV操作来控制这些过程。 对于第一个空,P1执行完成之后,需要通知P2、P3可以开始,此处需要V(S

Yan Ka Kue的博客 6136

数据结构学习

线性结构 学习内容包括堆栈的顺序存储和链式存储 顺序存储 用列表实现,创建一个结构体。Last表示当前位置。 #include &lt;iostream&gt; using namespace std; typedef int Position; struct LNode { int Data[10]; Position Last; }; void Creat(LNode *L) /...

weixin_38983802的博客 215

MinerU 系列教程 | 第二课:快速上手 -- 安装与第一次解析

本篇教程作为的第二课,将带你从零完成 MinerU 的环境搭建、模型下载,并成功运行第一次文档解析。上一课我们从宏观视角认识了 MinerU,本课开始正式动手实践。

weixin_43674738的博客 299

C++链表详解:从零开始掌握链表结构,轻松应对算法面试

本文系统介绍了链表这一基础数据结构,重点分析了C++中链表的实现与应用。内容涵盖:1)链表与数组的核心对比;2)单向、双向和循环链表的实现方式;3)链表的基本操作(插入、删除、反转等)及时间复杂度分析;4)常见错误与优化技巧;5)面试高频考点和实际应用场景(如LRU缓存)。文章强调指针操作顺序、内存管理和边界条件等关键点,并提供了学习路线和推荐资源。链表作为算法面试的核心考点,需要结合实践才能真正掌握。

小庞的博客 9249

姿态传感器/陀螺仪之ICM-42670-P应用原理图设计

ICM-42670-P采用LGA-14封装,尺寸为2.5x3x0.76毫米,工作电压范围为1.71V至3.6V,支持I3CSM、I2C和SPI串行通信接口。其设计目标是提供高精度、低功耗和小型化的解决方案,以满足消费类和工业应用的需求。ICM-42670-P是一款由TDK InvenSense推出的高性能六轴MEMS运动追踪传感器,集成了3轴陀螺仪和3轴加速度计,适用于多种应用场景,包括可穿戴设备、游戏控制器、无人机、AR/VR设备等。

corlin6688的博客 1198

Vue3 - 详解播放m3u8视频流+HLS拉流推流完整方案,vue3如何播放m3u8格式文件实时视频播放教程(流媒体播放、直播视频流、实时摄像头监控视频流对接、后端服务器切片分片传输视频流边下边播)

vue3组件播放m3u8格式视频,实现hls流媒体监控摄像头实时播放,vue3播放m3u8视频流格式,实时直播画面视频流播放,摄像头监控画面推流,hls.js,Vue Video.js播放m3u8视频流格式,实现hls流媒体监控摄像头实时播放,vue中使用video.js播放m3u8格式的视频,m3u8格式视频,通过HLS协议播放m3u8格式视频,黑屏不显示怎么办,视频非常卡加载缓慢,拉流报错,推流报错,播放失败,播放监控m3u8视频流格式,苹果ios播放,vue3中使用video标签播放MP4,西瓜视频插

🏆 前端领域优质创作者 5930

链表面试题总结 C/C++

数据结构和算法,是我们程序设计最重要的两大元素,可以说,我们的编程,都是在选择和设计合适的数据结构来存放数据,然后再用合适的算法来处理这些数据。       在面试中,最经常被提及的就是链表,因为它简单,但又因为需要对指针进行操作,凡是涉及到指针的,都需要我们具有良好的编程基础才能确保代码没有任何错误。       链表是一种动态的数据结构,因为在创建链表时,我们不需要知道链表的长度,

Dev-L的博客 2423

C++(Qt)软件调试---内存分析工具Heob(26)

绝对最全面最详细的Heob使用说明。(图文并茂) 绝大部分的文章都说Heob是一个内存泄漏分析工具,其实Heob只是内存泄漏分析功能比较突出,实际上Heob可以分析很多内存问题。 Heob是一个Windows下检测缓冲区溢出(野指针、空指针、内存越界、重复释放、异常捕获等)和内存泄漏的工具,集成到Qt Creator中,功能强大,简单容易上手。

mahuifa的博客 4311

C++链表操作及常见面试题解析

本文介绍了C++中链表的基本操作和常见面试题。首先讲解了链表节点定义和创建、打印、插入、删除、反转等基础操作,并给出了完整代码示例。然后重点解析了链表相关的常见面试题,包括环检测、双指针技巧(寻找中间节点和倒数第k个节点)等。文章通过清晰的代码实现,帮助读者掌握链表的核心操作和解题思路,为面试和实际编程提供实用参考。

bkspiderx的博客 766

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++面试(9)-----反转链表

输入一个链表,输出该链表反转之后的链表。例如: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL

jndingxin的专栏 314

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

求单链表的最大值与原地逆转_GitHub - bayec/c_cpp_khbd: C/C++面试宝典

C/C++面试宝典目录1 常识概念题1.1 C/C++基础1.1.1 面向对象的三大特点封装把数据和成员函数封装到一起形成一个类,隐藏类内部的实现细节,把不想告诉别人的东西隐藏起来,可以告诉别人的东西公开,增加安全性。继承从已有的类中派生出新的类称为子类,子类继承父类的成员,并能根据自己的需求扩展出新的行为,提高了代码的复用性。多态同一种事物所表现出的多种形态,简单地说是“一个接头,多种实现”。有...

weixin_39646018的博客 301

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

2024年C C++最新【数据结构】顺序表和链表详解,2024大厂C C++面试题精选

此时mid是结点3,当反转操作结束后链表为:1,2,1,2,3,**此时(第一个)结点2的next依然指向结点3,**当比较操作的循环进行到结点2的next的val与结点3的val比较时,其实比较的是同一个结点(结点3)此时mid是结点3,当反转操作结束后链表为:1,2,1,2,3,**此时(第一个)结点2的next依然指向结点3,**当比较操作的循环进行到结点2的next的val与结点3的val比较时,其实比较的是同一个结点(结点3),给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不。

2401_84976222的博客 1130

[C++面试题]之单链表

接下来我会介绍C++面试题中第二个重要的板块——数据结构,主要包括字符串的使用、堆、栈、排序方法等,今天我们先来看单链表。 1、编程实现一个单链表的建立/测长/打印。 答案: #include<iostream> using namespace std; //单链表结构体 typedef struct student { int...

weixin_30781631的博客 266

c++使用单向链表存储一组有序数据_C++面试题

更新至【58】,不定期更新,加入了自己的理解,如有不对,请指出。【1】 new/delete和malloc/free的区别和联系?1. 二者都可以动态分配和撤销内存。2. new/delete是运算符,执行效率更高,而后者是标准函数库。3. 针对对象时,new/delete会执行对象的构造/析构函数,而后者不会。4. new返回数据类型指针,malloc返回void指针。【2】 delete和de...

weixin_28866737的博客 390

将两个已排序的链表归并成一个链表(C++面试题)

题目: 将两个已经排好序的链表组合成一个排序的链表。 /* 归并排序的思想 时间:2015年4月8日 19:59:02 */ #include #include using namespace std; typedef struct Node //模拟节点 { int data; struct Node * next; }NODE,* PNODE; class List {

zjs342的专栏 581

链表 python 牛客_链表中倒数第K个结点 牛客网 程序员面试金典 C++ Python

链表中倒数第K个结点 牛客网 程序员面试金典 C++ Python题目描述输入一个链表,输出该链表中倒数第k个结点。C++/*struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};*/class Solution {public://run:3ms memory:476kList...

weixin_35252187的博客 106
上一篇: C++面试题——括号匹配
下一篇: C++面试——最小的K个数(LeetCode 面试题40)
玄蛰
博客等级 码龄9年 89粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值