合并链表复习----以力扣21题为例

首先我们先简单回顾一下链表的定义:链表是一种物理存储单元上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的。(百度百科)

链表的特点是链表节点不一定是物理相邻的(链表存储单元可以是连续也可以是不连续的),也就是说,链表的每个元素一般还会存储一个指示位置的信息。因为链表的不连续性,所以当我们想要进行查找工作的过程中会花费很长的时间,效率不高。

但是也正是因为链表的不连续性,链表非常容易插入或者删除某一个元素,因此如果一个表主要是进行一些数据量不大的增加删除插入的话,一般都会用链表来完成这一工作。

来看力扣的21题,力扣21题正好给了你两个升序链表,让你将其合并成一个新的链表,并且新的链表也是升序的。说到这里,我们先来回顾一下链表是如何插入的。

例如这样的一个链表:1->2->4,如果我们想要把3插入到这个链表里面来的话,我们需要进行以下操作:首先修改3->next为4,然后修改2->next为3,最后断开原来2和4的链接,这样我们就将3这个元素插入到了链表当中。

链表的合并与上述的插入大抵有相同的思想,都是通过修改next指针的指示方向来达成目的。本题的合并也是通过修改next指针的方式完成的。

分析本题,首先我们先要讨论空链表的情况,这一点在示例二和示例三当中也有体现。如果某个表是空的,那么就返回另一个表作为结果。如果两个链表都不是空链表的话,那么就要开始讨论柯炳的过程了。首先我们需要建立一个新的头节点和p指针,因为最后要返回一个新的链表,故做以上工作。这道题是通过比较两个数的大小来决定先后顺序的,如果小于等于,那么就在p指针所指元素后新建一个元素并且将这个元素放在这个位置,被移走元素的链表指针指向下一位。大于的情况同理。在进行完操作之后,如果链表非空,最后两个链表当中有一个还有剩余元素的话,p指针将会指向含有剩余元素的链表。并最后返回合并链表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值