对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中的localtime()方法使用详解
May 22 Python
Python调用C++程序的方法详解
Jan 24 Python
python django事务transaction源码分析详解
Mar 17 Python
python机器学习之神经网络(一)
Dec 20 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
python3处理含有中文的url方法
May 10 Python
实例详解Python模块decimal
Jun 26 Python
Python Pandas数据结构简单介绍
Jul 03 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
Jul 01 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 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
Zend公司全球首推PHP认证
2006/10/09 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
详解vue路由
2020/08/05 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
药学专业个人自我评价
2013/11/11 职场文书
全运会口号
2014/06/20 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
2014年文秘工作总结
2014/11/25 职场文书
教代会闭幕词
2015/01/28 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript
Python测试框架pytest高阶用法全面详解
2022/06/01 Python