python遞歸&迭代方法實現(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),并返回一個頭節(jié)點
- 2.結(jié)束條件:當鏈表為空或只有一個節(jié)點時返回
? ? if head==None or head.next==None: ? ? ? ? return head
- 3.等價條件(縮小范圍),對于數(shù)組來講,縮小范圍是n——>n-1,對于鏈表來講則可以考慮
head——
>head.next ? ? reverse = reverse_list(head.next) ?#假設(shè)reverse是head以后的、已經(jīng)反轉(zhuǎn)過的鏈表
接下來要做的是將head節(jié)點接到已經(jīng)反轉(zhuǎn)過的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)后打?。?/strong>
? ? 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)此時head節(jié)點變成了最后一個節(jié)點,說明函數(shù)是對head這個實例直接作用的
? ? print('\n')
?
? ? # print('revere is')
? ? # print_list(revere)
? ? # print('\n')
?
? ? print('反轉(zhuǎn)兩次的list:')
? ? print_list(reverse_list2(revere))
到此這篇關(guān)于python遞歸&迭代方法實現(xiàn)鏈表反轉(zhuǎn)的文章就介紹到這了,更多相關(guān)python鏈表反轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)簡易自習(xí)室座位預(yù)約系統(tǒng)
本文將結(jié)合實例代碼,介紹python實現(xiàn)簡易自習(xí)室座位預(yù)約系統(tǒng),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06
Python在for循環(huán)里處理大數(shù)據(jù)的推薦方法實例
這篇文章主要介紹了Python在for循環(huán)里處理大數(shù)據(jù)的推薦方法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
pycharm?使用conda虛擬環(huán)境的詳細配置過程
這篇文章主要介紹了pycharm?使用conda虛擬環(huán)境,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
Python爬取門戶論壇評論淺談Python未來發(fā)展方向
這篇文章主要介紹了如何實現(xiàn)Python爬取門戶論壇評論,附含圖片示例代碼,講解了詳細的操作過程,有需要的的朋友可以借鑒參考下,希望可以有所幫助2021-09-09

