对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 七种邮件内容发送方法实例
Apr 22 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
Python实现针对中文排序的方法
May 09 Python
Python修改文件往指定行插入内容的实例
Jan 30 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
使用python采集Excel表中某一格数据
May 14 Python
python 19个值得学习的编程技巧
Aug 15 Python
python实现简单遗传算法
Sep 18 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
python编程项目中线上问题排查与解决
Nov 01 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 print类函数使用总结
2010/06/25 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
JavaScript 特殊字符
2007/04/05 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
javascript 获取浏览器版本
2015/01/21 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
Python文件读取的3种方法及路径转义
2015/06/21 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
房屋租赁协议书范本
2014/04/10 职场文书
龙门石窟导游词
2015/02/02 职场文书
资料员岗位职责范本
2015/04/13 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android
python实现MD5进行文件去重的示例代码
2021/07/09 Python
关于Python使用turtle库画任意图的问题
2022/04/01 Python