fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                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解題
開始程序前需提前導入前面寫好的鏈表基本操作包和結點數據結構,在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数据结构:合并两个有序链表的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 电商主机便宜又好用?4核电脑不到1K也有
 - 下一篇: 先马发布黑洞系列 ATX3.0 金牌全模