两个有序无头节点单链表的合并

本文讲述了在面试中遇到的合并两个已排序无头结点单链表的问题。首先,讨论了合并有序数组的基本原理和注意事项,然后详细介绍了两种合并单链表的思路:一是保持原链表结构不变,二是利用递归比较头结点。提供了具体实现代码,帮助理解如何在不创建新节点的情况下合并链表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      现在正是春招的时候,我这个准毕业生也参加了各大公司的招聘活动,前段时间过了一家的线上笔试,有幸去到面试现场和面试官直接交流,结果虽然不尽如人意,可也算是为了今年春招作下准备工作。当时,面试官让我现场写一道编程题,题目是:现有两个已排序单链表,请设计算法将两个链表合并为一个已排序单链表。初看我觉得很简单,虽然数据结构已经有段时间没看了,可这种“基础题”也不至于完全不会啊!面试官让我先整理思路,想好了先和他说一遍解题思路再写代码,开始我向他确定了几个我认为比较有用的信息——单链表是否带头结点、二升序还是降序,得到的答案是——无头结点、升序降序都行。可是,在他给我的时间里,我整个大脑像是停止运转了一样,思绪非常的混乱,等到最后面试官都看不下去了,直接和我挑明“写不出代码也没关系,说一遍思路也行”,这句话对于当时的我来说就像一根救命稻草,我连忙接下这话,把还没有真正理顺的思路就这样讲了出来...现在想想,当时真的好怂啊,一直担心时间不够,最应该关心的题目反而都没静下心来好好解决。

      后来,我在《剑指offer》里面遇见了这道题,现在就好好讲讲这个问题吧~

      在这之前,我们先看一下“合并两个有序数组”这个问题。因为数组是一组连续存储的单元组成的,如果在合并时,只考虑在原来数组的基础上进行合并,并且紧接着数组之后的空间可用、充足的话,那么我们的合并方法就如下图所示:


      上图是完整的合并过程,其中要注意两点: 1.  已排序新数组的长度一定要小于等于原数组的长度  2.拷贝顺序为从后往前,如采用从前往后的方式,则整个合并过程的时间复杂度为O(n∧2),并且可能发生内存重叠。

      合并两个单链表不像合并两个数组一样操作简单,因为链表的各

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值