单链表习题(3)(超详细)

前言:

  这篇文章将会是小编最近做过的习题总结的最后一篇,这一篇有些习题颇有一些难度,不过小编将会带领读者朋友们一起克服难关,下面废话不多说,开启今天的习题之旅!

目录:

1.链表分割

2.相交链表

3.随机链表的复制(本文最具有难度系数的一道题) 

正文:

1.链表分割

  老规矩,小编先给上链接:链表分割_牛客题霸_牛客网 (nowcoder.com) 

   这个题目给的描述也算是比较直白的,小编概括一下:就是给定一个链表,并且给定一个数,如果链表中的数据小于给定的这个数,那么就把这个链表放在前面,如果结点的数据大于给定的数,那么这个结点就往后放,小编在第一次看到这个题目的时候,脑子里是一点思路也没有,如果这是个数组那么这个题目可以相当于送分题,可以新设置一个数组来存放数据,把比较好的数据直接放到新数组里面就好了,我们以此类推,那么我们可不可以也新设置一个链表来进行同样的操作呢?答案是显然可以的,不过此时我们需要设置两个链表分别存数据,一个存比给定值小的,一个存比给定值大的,我们在分别存放完以后,可以把第一个链表的尾结点直接连接到第二个链表的头结点,此时我们就可以实现对于链表进行分割,下面小编给出更详细的解释:

  首先我们需要新建立两个链表,第一个链表我们暂且叫做newphead,是用来存放比给定值小的结点,第二个链表我们叫做newpphead,当然两个链表也分别有着newplist,newpplist来代替它们进行链表向后移动,此时我们用原链表进行循环,循环条件就是该链表的结点不为空,此时我们通过比较的方式来判断该结点是要放入哪个链表,在进行循环完以后,我们直接让newplist的next结点直接指向newpplist,此时原链表的数据也没有改动,我们也完成了链表的分割,此时直接返回newphead就完成了这个题目,不过我们这个代码的开头先要判断一下给定我们的链表是不是空的,如果是空的,直接返回NULL就好,不然我们可能造成对于空结点的引用,下面小编给出该题目的图文解释来帮助各位理解:

  我们需要先设置好两个链表:

  此时我们开始进行循环比较,在这里我们给定x是5,所以2比5小放入第一个链表中 :

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值