Python實(shí)現(xiàn)單鏈表中元素的反轉(zhuǎn)
給定一個(gè)單鏈表,將其反轉(zhuǎn)。其實(shí)很容易想到,只需要修改每個(gè)結(jié)點(diǎn)的指針指向:即令后一個(gè)結(jié)點(diǎn)指向前一個(gè)結(jié)點(diǎn),并且將表頭指針指向最后一個(gè)結(jié)點(diǎn)即可。
這個(gè)過(guò)程可以用循環(huán)實(shí)現(xiàn),也可以用遞歸來(lái)實(shí)現(xiàn)。
1、用循環(huán)來(lái)實(shí)現(xiàn):
class LNode: ? ? def __init__(self, elem): ? ? ? ? self.elem = elem ? ? ? ? self.pnext = None ? def reverse(head): ? ? if head is None or head.pnext is None: #如果輸入的鏈表是空或者只有一個(gè)結(jié)點(diǎn),直接返回當(dāng)前結(jié)點(diǎn) ? ? ? ? return head ? ? pre = None #用來(lái)指向上一個(gè)結(jié)點(diǎn) ? ? cur = newhead = head #cur是當(dāng)前的結(jié)點(diǎn)。newhead指向當(dāng)前新的頭結(jié)點(diǎn) ? ? while cur: ? ? ? ? newhead = cur ? ? ? ? temp = cur.pnext ? ? ? ? cur.pnext = pre #將當(dāng)前的結(jié)點(diǎn)的指針指向前一個(gè)結(jié)點(diǎn) ? ? ? ? pre = cur ? ? ? ? cur = temp ? ? return newhead ? if __name__=="__main__": ? ? head = LNode(1) ? ? p1 = LNode(2) ? ? p2 = LNode(3) ? ? head.pnext = p1 ? ? p1.pnext = p2 ? ? p = reverse(head) ? ? while p: ? ? ? ? print(p.elem) ? ? ? ? p = p.pnext
2、用遞歸來(lái)實(shí)現(xiàn):
class LNode: ? ? def __init__(self, elem): ? ? ? ? self.elem = elem ? ? ? ? self.pnext = None ? def reverse(head): ? ? if not head or not head.pnext: ? ? ? ? return head ? ? else: ? ? ? ? newhead = reverse(head.pnext) ? ? ? ? head.pnext.pnext = head #令下一個(gè)結(jié)點(diǎn)的指針指向當(dāng)前結(jié)點(diǎn) ? ? ? ? head.pnext = None #斷開(kāi)當(dāng)前結(jié)點(diǎn)與下一個(gè)結(jié)點(diǎn)之間的指針指向聯(lián)系,令其指向空 ? ? ? ? return newhead ? ? if __name__=="__main__": ? ? head = LNode(1) ? ? p1 = LNode(2) ? ? p2 = LNode(3) ? ? head.pnext = p1 ? ? p1.pnext = p2 ? ? p = reverse(head) ? ? while p: ? ? ? ? print(p.elem) ? ? ? ? p = p.pnext
以下是圖解遞歸的詳細(xì)過(guò)程:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
狀態(tài)機(jī)的概念和在Python下使用狀態(tài)機(jī)的教程
這篇文章主要介紹了狀態(tài)機(jī)的概念和在Python下使用狀態(tài)機(jī)的教程,本文來(lái)自于IBM官方開(kāi)發(fā)者技術(shù)文檔,需要的朋友可以參考下2015-04-04Pytorch抽取網(wǎng)絡(luò)層的Feature Map(Vgg)實(shí)例
今天小編就為大家分享一篇Pytorch抽取網(wǎng)絡(luò)層的Feature Map(Vgg)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python Selenium破解滑塊驗(yàn)證碼最新版(GEETEST95%以上通過(guò)率)
這篇文章主要介紹了Python Selenium破解滑塊驗(yàn)證碼最新版(GEETEST95%以上通過(guò)率),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python對(duì)ip地址進(jìn)行排序、分類的方法詳解
這篇文章主要介紹了python對(duì)ip地址進(jìn)行排序、分類的方法詳解,IP協(xié)議全稱為“網(wǎng)際互連協(xié)議Internet?Protocol”,IP協(xié)議是TCP/IP體系中的網(wǎng)絡(luò)層協(xié)議,需要的朋友可以參考下2023-07-07Python PyQt5學(xué)習(xí)之樣式設(shè)置詳解
這篇文章主要為大家詳細(xì)介紹了Python PyQt5中樣式設(shè)置的相關(guān)資料,例如為標(biāo)簽添加背景圖片、為按鈕添加背景圖片、設(shè)置窗口透明等,感興趣的可以學(xué)習(xí)一下2022-12-12python實(shí)現(xiàn)讀取Excel內(nèi)容并展示成json
這篇文章主要為大家詳細(xì)介紹了如何使用python實(shí)現(xiàn)讀取Excel內(nèi)容并展示成json功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2023-12-12