網(wǎng)站首頁 編程語言 正文
本文實(shí)例為大家分享了python實(shí)現(xiàn)單鏈表反轉(zhuǎn)的具體代碼,供大家參考,具體內(nèi)容如下
代碼如下:
class Node(object):
? ? def __init__(self, elem, next_=None):
? ? ? ? self.elem = elem
? ? ? ? self.next = next_
?
def reverseList(head):
? ? if head == None or head.next==None: ?# 若鏈表為空或者僅一個(gè)數(shù)就直接返回
? ? ? ? return head?
? ? pre = None
? ? next = None
? ? while(head != None):?
? ? ? ? next = head.next ? ? # 1
? ? ? ? head.next = pre ? ? # 2
? ? ? ? pre = head ? ? ?# 3
? ? ? ? head = next ? ? ?# 4
? ? return pre
if __name__ == '__main__':
? ? l1 = Node(3) ? ?# 建立鏈表3->2->1->9->None
? ? l1.next = Node(2)
? ? l1.next.next = Node(1)
? ? l1.next.next.next = Node(9)
? ? l = reverseList(l1)
? ? print (l.elem, l.next.elem, l.next.next.elem, l.next.next.next.elem)
原始單鏈表:
反轉(zhuǎn)后單鏈表:
反轉(zhuǎn)過程如下:
第一步:next = head.next
將 head.next 賦值給 next 變量,即next 指向了節(jié)點(diǎn)2,先將節(jié)點(diǎn)2 保存起來。
第二步:head.next = pre (初始pre==None)
將 pre 變量賦值給 head.next,即 此時(shí)節(jié)點(diǎn)1 指向了 None
第三步:pre = head
將 head 賦值給了 pre,即 pre 指向節(jié)點(diǎn)1,將節(jié)點(diǎn)1 設(shè)為“上一個(gè)節(jié)點(diǎn)”
第四步:head = next
將 next 賦值給 head,即 head 指向了節(jié)點(diǎn)2,此時(shí)節(jié)點(diǎn)2 設(shè)為“頭節(jié)點(diǎn)”
第一次循環(huán)完畢,進(jìn)入第二次循環(huán),如下圖:
第一步:next = head.next
將 head.next 賦值給 next 變量,即 next 指向了節(jié)點(diǎn)3,先將節(jié)點(diǎn)3 保存起來。
第二步:head.next = pre (此時(shí)的pre已經(jīng)不為None)
將 pre 賦值給 head.next,pre 在上一次循環(huán)的時(shí)候指向了節(jié)點(diǎn)1,那么這一步的意義就是節(jié)點(diǎn)2 指向了 節(jié)點(diǎn)1,完成1和2節(jié)點(diǎn)的反轉(zhuǎn)。
第三步:pre = head
將 head 賦值給了 pre,即 pre 指向節(jié)點(diǎn)2,將節(jié)點(diǎn)2 設(shè)為“上一個(gè)節(jié)點(diǎn)”
第四步:head = next
將 next 賦值給 head,即 head 指向了節(jié)點(diǎn)3。此時(shí)節(jié)點(diǎn)3 設(shè)為“頭節(jié)點(diǎn)”
第二次循環(huán)完畢,以此類推!第三次第四次第五次循環(huán)。最后反轉(zhuǎn)成如下圖
若干注意點(diǎn):
(1)幫助記憶圖:
(2)當(dāng)前頭節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)一定要保存(比如:當(dāng)前頭節(jié)點(diǎn)為2,先將節(jié)點(diǎn)3 保存起來)
(3)實(shí)現(xiàn)反轉(zhuǎn)的key point: head.next = pre
原文鏈接:https://blog.csdn.net/gongliming_/article/details/88712221
相關(guān)推薦
- 2022-12-08 C#與C++?dll之間傳遞字符串string?wchar_t*?char*?IntPtr問題_C#
- 2022-05-07 Python?ini配置文件示例詳解_python
- 2022-04-25 C#使用NPOI設(shè)置Excel下拉選項(xiàng)_C#教程
- 2023-03-29 goland遠(yuǎn)程調(diào)試k8s上容器的實(shí)現(xiàn)_Golang
- 2022-10-06 Redis位圖bitmap操作_Redis
- 2022-06-08 基于Springboot實(shí)現(xiàn)專業(yè)認(rèn)證材料管理系統(tǒng)
- 2022-11-18 Shell實(shí)現(xiàn)批量操作文件的方法詳解_linux shell
- 2022-04-17 彈性布局 怎么讓某一列自適應(yīng)元素內(nèi)容的寬度
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支