对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入门学习之字符串与比较运算符
Oct 12 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
python抓取网页中链接的静态图片
Jan 29 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
python实现大文件分割与合并
Jul 22 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
创建Shapefile文件并写入数据的例子
Nov 26 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
python 监控logcat关键字功能
Sep 04 Python
python输入中文的实例方法
Sep 14 Python
Python3.9.1中使用match方法详解
Feb 08 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
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
Python使用re模块验证危险字符
2020/05/21 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
Linux的主要特性
2014/10/06 面试题
大学优秀班集体申报材料
2014/05/23 职场文书
教师继续教育反思周记
2015/06/25 职场文书
《灰雀》教学反思
2016/02/19 职场文书
导游词之千岛湖
2019/09/23 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
pytorch实现手写数字图片识别
2021/05/20 Python
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电