python遞歸&迭代方法實(shí)現(xiàn)鏈表反轉(zhuǎn)
定義鏈表node結(jié)構(gòu):
class ListNode: ? ? ? def __init__(self,data): ? ? ? ? self.data = data ? ? ? ? self.next = None
將L轉(zhuǎn)化為鏈表:
def make_list(L):
將L初始化為鏈表:
? head = ListNode(L[0]) ? ? cur = head ? ? for i in L[1:]: ? ? ? ? cur.next = ListNode(i) ? ? ? ? cur = cur.next ? ? return head ?
遍歷鏈表:
def print_list(head): ? ? ? cur = head ? ? while cur != None: ? ? ? ? print(cur.data,end=' ') ? ? ? ? cur = cur.next ?
遞歸法 反轉(zhuǎn)鏈表:
def reverse_list(head):
三要素:
- 1.明確函數(shù)功能,該函數(shù)可以將鏈表反轉(zhuǎn),并返回一個(gè)頭節(jié)點(diǎn)
- 2.結(jié)束條件:當(dāng)鏈表為空或只有一個(gè)節(jié)點(diǎn)時(shí)返回
? ? if head==None or head.next==None: ? ? ? ? return head
- 3.等價(jià)條件(縮小范圍),對(duì)于數(shù)組來(lái)講,縮小范圍是n——>n-1,對(duì)于鏈表來(lái)講則可以考慮
head
——
>head.next ? ? reverse = reverse_list(head.next) ?#假設(shè)reverse是head以后的、已經(jīng)反轉(zhuǎn)過(guò)的鏈表
接下來(lái)要做的是將head節(jié)點(diǎn)接到已經(jīng)反轉(zhuǎn)過(guò)的reverse上:
? ? tmp = head.next ? ? tmp.next = head ? ? head.next = None ?return reverse ?#返回新的列表
迭代法:
def reverse_list2(head): ? ? #print_list(head) ? ? cur = head ? ? pre = None ? ? while cur: ? ? ? ? tmp = cur.next ? ? ? ? cur.next = pre ? ? ? ? pre = cur ? ? ? ? cur = tmp ? ? head = pre ? ? return head ? if __name__ == '__main__': ? ? ? L = [3,2,7,8] ? ? head = make_list(L) ?
正序打?。?/strong>
? ? print('原始list:') ? ? print_list(head) ? ? print('\n') ?
反轉(zhuǎn)后打印:
? ? revere = reverse_list(head) ? ? print('反轉(zhuǎn)一次的list:') ? ? print_list(revere) ? ? print('\n') ?
反轉(zhuǎn)2:
? ? print('head is') ? ? print_list(head) ?#發(fā)現(xiàn)此時(shí)head節(jié)點(diǎn)變成了最后一個(gè)節(jié)點(diǎn),說(shuō)明函數(shù)是對(duì)head這個(gè)實(shí)例直接作用的 ? ? print('\n') ? ? ? # print('revere is') ? ? # print_list(revere) ? ? # print('\n') ? ? ? print('反轉(zhuǎn)兩次的list:') ? ? print_list(reverse_list2(revere))
到此這篇關(guān)于python遞歸&迭代方法實(shí)現(xiàn)鏈表反轉(zhuǎn)的文章就介紹到這了,更多相關(guān)python鏈表反轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python數(shù)據(jù)類型bytes?和?bytearray的使用與區(qū)別
本文主要介紹了python數(shù)據(jù)類型bytes?和?bytearray的使用與區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02python隨機(jī)模塊random的22種函數(shù)(小結(jié))
這篇文章主要介紹了python隨機(jī)模塊random的22種函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05python 調(diào)用HBase的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇python 調(diào)用HBase的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12Django 內(nèi)置權(quán)限擴(kuò)展案例詳解
這篇文章主要介紹了Django 內(nèi)置權(quán)限擴(kuò)展案例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Django JWT Token RestfulAPI用戶認(rèn)證詳解
這篇文章主要介紹了Django JWT Token RestfulAPI用戶認(rèn)證詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python使用numpy模塊創(chuàng)建數(shù)組操作示例
這篇文章主要介紹了Python使用numpy模塊創(chuàng)建數(shù)組操作,結(jié)合實(shí)例形式分析了Python使用numpy模塊實(shí)現(xiàn)數(shù)組的創(chuàng)建、賦值、修改、打印等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-06-06