原创: 老表 简说Python

今日问题 :翻转链表k个相邻结点

"""目标:写一段程序,合并两个有序链表例如:输入-> 1->2->3输入-> 2->5->6->8输出-> 1->2->2->3->5->6->8Goal: write a program to merge two ordered listsFor example:Input - > 1 - > 2 - > 3Input - > 2 - > 5 - > 6 - > 8Output - > 1 - > 2 - > 2 - > 3 - > 5 - > 6 - > 8"""

解题准备

首先我们写好链表的基本操作,在a_0_base.py文件中,目前包含对链表的定义类,初始化函数,遍历函数。(带头结点)

# -*- coding: utf-8 -*-"""@author = 老表@date = 2019-10-19@个人微信公众号 : 简说Python"""# 链表数据结构定义class ListNode: def __init__(self, x): self.data = x self.next = Noneclass ListOperation: a = 1 # 根据链表数据初始化链表 @staticmethod def init_list(n_list): # 初始化一个头指针 head = ListNode("head") cur = head for i in n_list: node = ListNode(i) cur.next = node cur = node # 相当于 cur = cur.next,后移 return head # 根据链表数据初始化一个有环的链表 @staticmethod def init_ring_list(n_list): # 初始化一个头指针 head = ListNode("head") cur = head for i in n_list: node = ListNode(i) cur.next = node cur = node # 相当于 cur = cur.next,后移 cur.next = head.next.next.next.next # 随意的,让最后一个结点指向第四个结点 return head # 遍历链表 @staticmethod def ergodic_list(head): # print(head.data) cur = head.next while cur: print(cur.data) cur = cur.next # 获取链表长度 @staticmethod def get_len_list(head): cur = head.next len_list = 0 while cur: len_list = len_list + 1 cur = cur.next return len_list

解题

开始程序前需提前导入前面写好的链表基本操作包和结点数据结构,在Linked_list的a_0_base.py中。

from Linked_list.a_0_base import ListOperation

解题思路

"""Method One : 遍历插入法核心思想:先确定合并后链表的头结点(表头小的),然后将两个链表一起遍历,将表头数值大的链表结点插入链表表头结点数值小的链表。时间复杂度:O(N)空间复杂度:O(1)"""

功能代码

def merge_two_ordered_list_one(head1, head2): if not head1.next: # 空链表 return head2 # 返回头结点 if not head2.next: # 空链表 return head1 # 返回头结点 # 合并第一步:判断谁的开始结点小,确定返回链表 cur_node1 = head1.next # 记录链表一当前结点 cur_node2 = head2.next # 记录链表二当前结点 if cur_node1.data < cur_node2.data: # 判断表头数值大小 # 链表1的表头小,则将链表2结点插入链表1 head = head1 # 记录合并后链表头结点 cur_node = cur_node1 # 记录合并后链表当前结点 cur_node1 = cur_node1.next # 链表1当前结点后移,遍历 else: # 链表2的表头小,则将链表1结点插入链表2 head = head2 # 记录合并后链表头结点 cur_node = cur_node2 # 记录合并后链表当前结点 cur_node2 = cur_node2.next # 链表2当前结点后移,遍历 # 合并第二步:遍历比较结点大小,依次插入小的结点 while cur_node1 and cur_node2: # 开始遍历插入 if cur_node1.data < cur_node2.data: # 链表1的结点小 cur_node.next = cur_node1 # 将链表1该结点插入合并后的链表(准确来说只是追加) cur_node = cur_node1 # 记录合并后的链表的当前结点 cur_node1 = cur_node1.next # 链表1当前结点后移,继续遍历 else: # 链表2的结点小 cur_node.next = cur_node2 # 将链表2该结点插入合并后的链表(准确来说只是追加) cur_node = cur_node2 # 记录合并后的链表的当前结点 cur_node2 = cur_node2.next # 链表2当前结点后移,继续遍历 # 遍历结束,将未遍历完的链表剩余结点加入到合并后的链表结尾 if cur_node1: # 链表1还未遍历完 cur_node.next = cur_node1 if cur_node2: # 链表2还未遍历完 cur_node.next = cur_node2 return head # 返回头结点

测试代码

# 当然,也许还有别的方法,比如建一个辅助的链表# 欢迎你说出你的想法# 程序入口,测试函数功能if __name__ == "__main__": list_data1 = [1, 2, 3] # 链表1初始化数据 list_data2 = [2, 4, 5, 6] # 链表2初始化数据 head1 = ListOperation.init_list(list_data1) # 初始化链表1,带头结点 head2 = ListOperation.init_list(list_data2) # 初始化链表2,带头结点 ListOperation.ergodic_list(head1) # 未操作前,遍历打印链表1 print("___________________________") ListOperation.ergodic_list(head2) # 未操作前,遍历打印链表2 head = merge_two_ordered_list_one(head1, head2) # 测试方法一 print("---------------------") ListOperation.ergodic_list(head) # 操作后,遍历打印链表

本文代码思路部分来自书籍《Python程序员面试宝典》,书中部分代码有问题或未提供代码,文中已经修改过了,并添加上了丰厚的注释,方便大家学习,后面我会把所有内容开源放到Github上,包括代码,思路,算法图解(手绘或者电脑画),时间充裕的话,会录制视频。

希望大家多多支持。

最后,我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,可以送给每一位喜欢Python的小伙伴,想要获取的可以关注我的头条号并在后台私信我:教程,即可免费获取。

fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表相关推荐

  1. Python数据结构与算法_9_有序链表

    前情提要:Python数据结构与算法_8_链表.无序链表 接下来我们研究有序链表. 什么是有序链表 如果给定一个链表,他的节点数据元素都是的整数,如77, 26, 31, 93, 17, 54.如果这 ...

  2. python合并两个数据集_在Python中合并两个数据集

    我有两组x-y数据,它们的x值应该合并.为了说明这一点,第一组如下所示:0.5;3.4 0.8;3.8 0.9;1.2 1.3;1.1 1.9;2.3 第二盘是这样的: ^{pr2}$ 数据在两个单独 ...

  3. python实现合并两个文件并打印输出

    # python实现合并两个文件并打印输出import fileinputfile_Path1 = input("请输入第一个合并文件:") file_Path2 = input( ...

  4. Python:合并两个list[]

    Python:合并两个list[] Created: January 24, 2022 9:58 PM 今天在开发的时候,遇到一个问题,就是将两个python 的list对象数据进行合并,有如下方法可 ...

  5. python合并k个有序链表_Leetcode合并K个升序链表(Python版本),LeetCode,python

    一.描述 给你一个链表数组,每个链表都已经按升序排列.请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[ ...

  6. 两个无序单链表,排序后合并成一个有序链表

    两个无序单链表,排序后合并成一个有序链表 算法思想:用冒泡法,对链表1和2进行排序,对排序后的两个链表,从小到大进行循环,装入链表3中. #include<stdio.h> #includ ...

  7. python程序执行的两种方式_012.执行Python程序的两种方式

    一.执行Python程序的两种方式 1.1 交互式 在终端内输入python3,然后输入python代码 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉 ...

  8. python实现合并两个有序列表

    题目描述 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. LeetCode原题地址:https://leetcode-cn.com/problems/me ...

  9. c语言求两个有序表合成差集代码,两个有序链表求差集,合并为一个有序链表...

    小白今天刚入门数据结构,正在学习<数据结构高分笔记>,其中第35页仿真题目(2)完成情况如下,如有错误,不吝赐教. 题目要求:已知递增有序的单链表A,B,元素个数分别m,n,分别存储一个集 ...

最新文章

  1. SpringMvc 3.x跨域+ajax请求
  2. ECMASCript 2019可能会有哪些特性?
  3. 阿里云服务器Svn-Server无法连接,阿里云服务器SVNServer配置
  4. 解决eclipse和myeclipse不能编译项目的问题
  5. P4929-[模板]舞蹈链(DLX)
  6. C语言 | 直接插入排序
  7. C++学习笔记系列(一)
  8. 循环输出26个字母C语言,菜鸟求助,写一个随机输出26个英文字母的程序
  9. python哈希类型_python 入门之 – hash(十七)
  10. 串口通讯 电脑和dsp_高速DSP与PC实现串口通信的方法
  11. 微信小程序添加服务器域名
  12. XSS Filter Evasion Cheat Sheet 中文版
  13. antd-vue表格内部换行
  14. [渝粤题库]西北工业大学中国古代法制史
  15. lamp技术_LAMP技术简介:
  16. rdt(可靠数据传输)
  17. 曙光服务器amd芯片,AMD六核体验 曙光Ar-H服务器首发评测.docx
  18. linux环境下从路径字符串中截取目录和文件名信息
  19. python中空格怎么打_Python中如何打印空行
  20. 论文邮箱不是导师的_为什么你迟迟收不到研究生导师的回复邮件?

热门文章

  1. 牛客小白月赛12:月月给华华出题(欧拉函数)
  2. CF1251F Red-White Fence(多项式/背包问题/组合数学)
  3. nowcoder Forsaken的数列 fhq-treap
  4. House Building HDU - 5538
  5. Take Your Seat Gym - 102222D
  6. [2019 牛客CSP-S提高组赛前集训营4题解] 复读数组(数论)+ 路径计数机(数上DP)+ 排列计数机(线段树+二项式定理)
  7. 洛谷P4219 大融合(LCT、虚子树)
  8. P3605 [USACO17JAN]Promotion Counting P(树状数组)
  9. CF666E-Forensic Examination【广义SAM,线段树合并】
  10. P3226-[HNOI2012]集合选数【状压dp】