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

原创: 老表 简说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
ac78913a55c237162747eae7e558dd22.png

解题

开始程序前需提前导入前面写好的链表基本操作包和结点数据结构,在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的小伙伴,想要获取的可以关注我的头条号并在后台私信我:教程,即可免费获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java.util.concurrent.locks.Condition文档说明

【1】Condition接口文档描述 1.Condition类把Object监视器方法&#xff08;wait,nofify, notifyAll&#xff09;分解为不同对象&#xff0c;通过与Lock实现类的合并使用&#xff0c;Condition可以产生每个object都有多个等待集的效果。在Lock实现类替代synchronized方法或语句…

谈谈HashMap线程不安全的体现

转载自 谈谈HashMap线程不安全的体现HashMap的原理以及如何实现&#xff0c;之前在JDK7与JDK8中HashMap的实现中已经说明了。那么&#xff0c;为什么说HashMap是线程不安全的呢&#xff1f;它在多线程环境下&#xff0c;会发生什么情况呢&#xff1f;1. resize死循环我们都知道…

手机打开python文件_使用python在计算机和手机之间通过wifi进行简单的文件传输...

我会使用 paramiko.它安全快速而且非常简单.怎么回事&#xff1f; 所以我们首先导入模块,然后指定日志文件&#xff1a; import paramiko paramiko.util.log_to_file(/tmp/paramiko.log) 我们打开一个SSH传输&#xff1a; host "example.com" port 22 transport p…

10人以下小团队管理手册-学习笔记

【README】 本文总结于《10人以下小团队管理手册》&#xff0c;很nice的一本书&#xff0c;有兴趣的同学可以翻下&#xff1b; 【0】序章 作者作为咨询师发现&#xff0c; 1.下属对主管有不满&#xff0c;主管对下属有怨言&#xff1b; 2.10人以下小团队主管经常会为 如何用…

JavaWeb项目:简易小米商城系统

Web项目&#xff1a;MyShop简易小米商城系统一.系统概述二.系统开发环境三.涉及技术四.系统功能及使用说明五.作者杂谈六.尾声七.gitee地址&#xff1a;&#xff08;源码见文末&#xff09; 一.系统概述 本系统是一个电商系统&#xff0c;可供用户注册&#xff0c;登录&#…

HashMap的实现与优化

转载自 HashMap的实现与优化HashMap的优化与实践 本文是基于作者在github上的Android 问题交流讨论坛提问而产生的一篇文章&#xff0c;也是自己早打算开坑的一篇文章。文章首先介绍了hashMap的一些基本知识&#xff0c;然后介绍了它在JDK8下的实现原理&#xff0c;最后着重介绍…

如何确定python开发环境已经配置好_搭建 python 开发环境 前面安装选位置我直接回车了现在我想测试查看目录该怎么办...

展开全部 1 ubuntu中一般安装e5a48de588b662616964757a686964616f31333431343036后的默认路径如下#!/usr/bin/env python #!/usr/locat/bin/python 如果没有找到&#xff0c;可以通过命令查询python路径whereis python which python 2 Windows一般可以进入python>>> i…

转- java单例模式几种实现方式

转自&#xff1a; https://www.cnblogs.com/ngy0217/p/9006716.html &#xff1b; 单例模式的五种实现方式 1、饿汉式(线程安全&#xff0c;调用效率高&#xff0c;但是不能延时加载)&#xff1a; 1 2 3 4 5 6 7 public class ImageLoader{ private static ImageLoade…

IDEA集成maven流程图详细介绍

前言 最近利用两天时间学习了MyBatis以及maven,避免经典的学过就忘记&#xff0c;我打算做出点总结以便日后复习&#xff0c;当然如果能帮到需要的人也是极好的。 一. 初识maven 1.maven是什么 maven是用来帮助我们快速搭建项目结构与开发环境的好工具。回想一下每次新建项…

pythonnumpy教程_Python教程:numpy的基本介绍

标准安装的Python中用列表(list)保存一组值&#xff0c;可以用来当作数组使用&#xff0c;不过由于列表的元素可以是任何对象&#xff0c;因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3]&#xff0c;需要有3个指针和三个整数对象。对于数值运算来说这种结构显…

Java8系列之重新认识HashMap

转载自 Java8系列之重新认识HashMap简介 Java为数据结构中的映射定义了一个接口java.util.Map&#xff0c;此接口主要有四个常用的实现类&#xff0c;分别是HashMap、Hashtable、LinkedHashMap和TreeMap&#xff0c;类继承关系如下图所示&#xff1a;下面针对各个实现类的特点做…

mysql-on duplicate key update实现insertOrUpdate官方文档

【README】 mysql 基于 on duplicate key update filedvalue ; 实现有则更新&#xff0c;没有则插入&#xff1b; 以下内容总结于 https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html 【1】api 描述 如果指定 ON DUPLICATE KEY UPDATE 子句并且要插入的行…

python统计段落单词词频_使用Python统计文件中词频,并且生成词云

wordcloud Table of Contents 1 怎样使用Python产生词云 from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba # Now, There is no word.txt under this path path_txt "/home/alan/Desktop/word.txt" f open(path_txt, r, encoding U…

IDEA中maven配置MyBatis简单流程

前言 刚学完javaweb&#xff0c;对自己的Dao层代码很不满意的话&#xff0c;可得来学学MyBatis。学习MyBatis既可以改进JDBC的使用&#xff0c;实现Dao层也会变得很简便&#xff0c;下面我将介绍IDEA中maven配置MyBatis简单流程。 如果想了解maven请转到我的上一篇文章中&…

(转)构建微服务:Spring boot 入门篇

转自&#xff1a; Spring Boot(一)&#xff1a;入门篇 - 纯洁的微笑 - 博客园 &#xff1b; 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#…

python参数_python参数的介绍

一、函数 1.为什么要使用函数&#xff1f; 减少代码的冗余 2.函数先定义后使用&#xff08;相当于变量一样先定义后使用&#xff09; 3.函数的分类&#xff1a; 内置函数&#xff1a;python解释器自带的&#xff0c;直接拿来用就行了 自定义函数&#xff1a;根据自己的需求自己…

一篇文章指明做JavaWeb项目需要的前置知识+完整项目初解读(萌新必看,十分友好)

前言 过了web这个阶段了&#xff0c;项目也完成了的我想给各位后来者总结一下我整个项目从开始到结束的经验&#xff0c;当然&#xff0c;也不是一帆风顺&#xff0c;报错有时候折磨的要死&#xff0c;废话不多说&#xff0c;现在就开始吧。 本文一共分为两个部分&#xff1a;…

HashMap 实现原理

转载自 HashMap 实现原理HashMap是常考点&#xff0c;而一般不问List的几个实现类(偏简单)。以下基于JDK1.8.0_102分析。 内部存储 HashMap的内部存储是一个数组&#xff08;bucket&#xff09;&#xff0c;数组的元素Node实现了是Map.Entry接口(hash, key, value, next)&#…

mybatis-启动源码分析

【1】测试用例 mybatis-config.xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configurat…

git 合并冲突_git分支管理的策略和冲突问题

备注&#xff1a;知识点关于分支中的冲突分支管理的策略分支策略备注&#xff1a;本文参考于廖雪峰老师的博客Git教程。依照其博客进行学习和记录&#xff0c;感谢其无私分享&#xff0c;也欢迎各位查看原文。知识点git log --graph --prettyoneline --abbrev-commit查看分支合…