链表面试题之合并有序的两个线性表-递归和非递归的方法

本文介绍了如何合并两个非递减有序的链式表,通过递归和非递归的方式实现合并操作,确保合并后的链表依然保持递增有序。示例中,线性表1包含元素3, 5, 8, 11,表2包含2, 8, 10, 15,合并结果为2, 3, 5, 8, 8, 10, 11, 15。" 13004653,1953481,Android Chronometer 暂停与恢复实现,"['Android开发', '布局', '计时器']
摘要由CSDN通过智能技术生成

     【问题描述】:

        合并两个有序的线性表,例:两个线性表都是非递减有序序列,线性表1:3->5->8->11->over,线性表2:2->8->10->15->over,合并后的线性表也是递增有序的:2->3->5->8->8->10->11->15.

     【问题分析】:

        拿到这样一道题如何去分析呢?我们知道对于链式存储的线性表而言每个链式表都有它自己的头指针:用来访问它的后续结点;对于合并后的链式表我们可以为它新开辟自己的头指针也可以借用链式表1或者链式表2的头指针;在实现合并链式表的操作中我考虑到了以下两种情况:
        @
        如果传过来的两个链式表中存在空链表,或者存在两个链表完全相等呢?我们知道线性表都是递增的此时我们只需要返回不为空的那个链表就可以了;
        @
        传过来的两个链式表不存在空链表呢?此时最先要考虑的就是如何选取合并之后链表的头结点了,我们是不是可以通过比较两个链表中第一个节点的数据域的大小让合并之后的链表指向数据域最小的结点呢?当然可以了,我们知道两个链表都是递增的而通过比较两个链表中第一个元素的大小就是找到了两个链表中最小的结点了;
        接下来要考虑的就是如何比较了,只要两个链表都不为空我们就通过比较他们的数据域找到最小的连接在合并之后的链表上;这种情况有没有可能其中一个链表已经比较结束了而另一个链表还存在元素呢?当然!!!此时就需要在程序的结尾判断,如果有则将该链表的后续结点全部连接到合并之后的结点上; 在这里要提醒大家一句就是如果没有为合并后的链表3开辟空间则不需要释放前两个链表,如果像我一样利用原先的线性表只改变指针指向关系则只需要释放合并后的链表就可以了,我刚开始就将前两个链表都释放了,破坏了系统中的内存堆导致程序失误,真的是小问题坑死人呐;
       @存在空链表
       
       @两个链表都存在元素
        
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值