对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实现系统状态监测和故障转移实例方法
Nov 18 Python
Python实现快速排序和插入排序算法及自定义排序的示例
Feb 16 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 Python
在Windows中设置Python环境变量的实例讲解
Apr 28 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
Python装饰器模式定义与用法分析
Aug 06 Python
详解python运行三种方式
May 13 Python
python中删除某个元素的方法解析
Nov 05 Python
python numpy 反转 reverse示例
Dec 04 Python
Python实现序列化及csv文件读取
Jan 19 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
python实现井字棋小游戏
Mar 04 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购物网站支付paypal使用方法
2010/11/28 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
使用正则替换变量
2007/05/05 Javascript
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
利用Python计算KS的实例详解
2020/03/03 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
python里glob模块知识点总结
2021/01/05 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
html5 学习简单的拾色器
2010/09/03 HTML / CSS
群众路线自查自纠工作情况报告
2014/10/28 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
销售区域经理岗位职责
2015/04/10 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
小学生读书笔记
2015/07/01 职场文书
军训通讯稿范文
2015/07/18 职场文书
JavaScript实现栈结构详细过程
2021/12/06 Javascript