網(wǎng)站首頁 編程語言 正文
本文實例為大家分享了python遞歸實現(xiàn)鏈表快速倒轉(zhuǎn)的具體代碼,供大家參考,具體內(nèi)容如下
案例:實現(xiàn)如下鏈表進行倒轉(zhuǎn)
源代碼:
'''
Node 用于表示隊列中的節(jié)點;它包含兩個域。
val 表示節(jié)點的值。
next指向下一個節(jié)點
'''
#定義鏈表的數(shù)據(jù)結(jié)構(gòu)
class Node:
? ? def __init__(self,val):
? ? ? ? self.next = None
? ? ? ? self.val ?= val
class ListUtility:#生成一個用來操作的鏈表
? ? def __init__(self):
? ? ? ? self.head = None
? ? ? ? self.tail = None
? ? ? ? pass
? ? def createList(self,nodeNum):
? ? ? ? if nodeNum <= 0:
? ? ? ? ? ? return None
? ? ? ? head = None
? ? ? ? val = 0
? ? ? ? node = None
? ? ? ? while nodeNum > 0:
? ? #如果head指針為空,代碼先構(gòu)造隊列頭部,如果不為空,代碼構(gòu)造節(jié)點對象,然后用上一個節(jié)點的next指針指向當前節(jié)點,從而將多個節(jié)點串聯(lián)成隊列。
? ? ? ? ? ? if head is None:
? ? ? ? ? ? ? ? head = Node(val)
? ? ? ? ? ? ? ? node = head
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? node.next = Node(val)
? ? ? ? ? ? ? ? node = node.next
? ? ? ? ? ? ? ? self.tail = node
? ? ? ? ? ? val += 1
? ? ? ? ? ? nodeNum -= 1
? ? ? ??
? ? ? ? self.head = head
? ? ? ? return head
? ??
? ? def printList(self,head):
? ? ? ??
? ? ? ? while head is not None:
? ? ? ? ? ? print("{0}->".format(head.val),end = " ")
? ? ? ? ? ? head = head.next
? ? ? ? print("null")
? ? ? ? ? ? ? ??
class ListReverse:
? ? def __init__(self, head):
? ? ? ? self.listHead = head
? ? ? ? self.newHead = None
? ? def recursiveReverse(self, node):
? ? ? ? #如果隊列為空或者只有一個節(jié)點,那么隊列已經(jīng)倒轉(zhuǎn)完成
? ? ? ? if node is None or node.next is None:
? ? ? ? ? ? self.newHead = node
? ? ? ? ? ? return node
? ? ? ? '''
? ? ? ? 如果隊列包含多個節(jié)點,那么通過遞歸調(diào)用的方式,先把當前節(jié)點之后所有節(jié)點實現(xiàn)倒轉(zhuǎn),
? ? ? ? 然后再把當前節(jié)點之后節(jié)點的next指針指向自己從而完成整個列表所有節(jié)點的導致
? ? ? ? '''
? ? ? ? head = self.recursiveReverse(node.next)
? ? ? ? head.next = node
? ? ? ? node.next = None
? ? ? ? return node
? ? def getReverseList(self):
? ? ? ? '''
? ? ? ? listHead是原隊列頭節(jié)點,執(zhí)行recursiveReverse后newHead指向新列表的頭結(jié)點,它
? ? ? ? 對應的其實是原列表的尾節(jié)點,而head指向新列表的尾節(jié)點
? ? ? ? '''
? ? ? ? self.recursiveReverse(self.listHead)
? ? ? ? return self.newHead
?utility = ListUtility()
head = utility.createList(10)
utility.printList(head)
#執(zhí)行倒轉(zhuǎn)算法,然后再次打印隊列,前后對比看看導致是否成功
reverse = ListReverse(head)
utility.printList(reverse.getReverseList()) ??
運行結(jié)果:
原文鏈接:https://blog.csdn.net/qq_44176343/article/details/118655436
相關推薦
- 2023-02-17 python引入其他py文件或模塊_python
- 2022-06-28 詳解Python中遞歸函數(shù)的原理與使用_python
- 2024-02-29 UNI-APP在自定義組件中內(nèi)嵌H5/Html網(wǎng)頁,可自定義webview大小,加載不閃屏
- 2022-01-08 iframe 監(jiān)聽滾動事件并滾動到指定位置
- 2021-12-13 linux壓縮文件和文件解壓縮命令介紹_Linux
- 2022-06-08 基于Apache?Hudi在Google云構(gòu)建數(shù)據(jù)湖平臺的思路詳解_Linux
- 2022-07-30 react擴展6_renderProps
- 2022-06-01 關于nginx?反向代理?URL替換方案_nginx
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支