对python实现合并两个排序链表的方法详解


Posted in Python onJanuary 23, 2019

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

1、迭代方法

def Merge(self, pHead1, pHead2):
    p1, p2 = pHead1, pHead2
    if p1 and p2:
      if p1.val < p2.val:
        head = p1
        p1 = p1.next
      else:
        head = p2
        p2 = p2.next
      cur = head
    elif p1:
      return p1
    else:
      return p2

    while p1 and p2:
      if p1.val < p2.val:
        cur.next = p1
        p1 = p1.next
      else:
        cur.next = p2
        p2 = p2.next
      cur = cur.next
    if p1:
      cur.next = p1
    else:
      cur.next = p2
    return head

2、递归方法

def Merge_rcv(self, pHead1, pHead2):
    if not pHead1:
      return pHead2
    if not pHead2:
      return pHead1
    if pHead1.val < pHead2.val:
      pres = pHead1
      pres.next = self.Merge(pHead1.next, pHead2)
    else:
      pres = pHead2
      pres.next = self.Merge(pHead1, pHead2.next)
    return pres

附注:

递归算法运行逻辑看着复杂,但是形式上都是简单的.每一层都表达了”当前结点要做的任务”.

思考递归算法的步骤应该是

1) 明确每一层要做的任务,eg,选择链表中较小值作为当前结点

2) 明确每一层的任务的完结点和递归连接点,eg,在pres.next处进行下一层递归

3) 明确return条件,eg,当p1,p2其中有一个为空时,递归任务结束

几乎所有的递归算法都可以沿着这三个要求思考构造,很自然不怕写递归算法,三个问题能自己在脑里回答出来,稍加修饰就是一个完整的递归算法.

这也是函数式编程的魅力所在.

以上这篇对python实现合并两个排序链表的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
python监控文件并且发送告警邮件
Jun 21 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
Python反射和内置方法重写操作详解
Aug 27 Python
python使用thrift教程的方法示例
Mar 21 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
Python post请求实现代码实例
Feb 28 Python
python实现TCP文件传输
Mar 20 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 #Python
python实现石头剪刀布程序
Jan 20 #Python
python random从集合中随机选择元素的方法
Jan 23 #Python
python3+selenium实现qq邮箱登陆并发送邮件功能
Jan 23 #Python
python3+selenium实现126邮箱登陆并发送邮件功能
Jan 23 #Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 #Python
python3实现逐字输出的方法
Jan 23 #Python
You might like
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
php对象工厂类完整示例
2018/08/09 PHP
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
详解vue2 $watch要注意的问题
2017/09/08 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
Python中pygame安装方法图文详解
2015/11/11 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
Pytorch转tflite方式
2020/05/25 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
简单租房协议书范本
2014/08/20 职场文书
关于运动会的广播稿
2014/09/22 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
在职证明格式样本
2015/06/15 职场文书
纪检监察立案决定书
2015/06/24 职场文书