206反轉(zhuǎn)鏈表

題目:反轉(zhuǎn)鏈表,LeetCode206

要求用循環(huán)和遞歸兩種方法。

一、循環(huán)解法

設(shè)置兩個(gè)外部引用,從前到后的,不斷地反轉(zhuǎn)每個(gè)節(jié)點(diǎn)的指針即可。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        previous = None
        current = head
        #先獲得current的下一個(gè)node,此時(shí)就有三個(gè)node了
        #把current指針指向previous
        #再把previous賦值為current
        #再把current賦值為下一個(gè)node
        while current != None:
            next_node = current.next
            current.next = previous
            previous = current
            current = next_node
        return previous

二、遞歸解法:

對遞歸了解還不深,需要結(jié)合劍指offer,Python數(shù)算兩本書,再加深理解一下。這里只是暫時(shí)的對代碼做一下解釋。

代碼思想:

  • 1、遞歸是層層調(diào)用的,所以注意在self.reverseList函數(shù)調(diào)用到最后一個(gè)節(jié)點(diǎn),結(jié)束所有的調(diào)用之前,每一步中的下面兩句代碼curr.next.next和curr.next是不會執(zhí)行的。
  • 2、一路調(diào)用函數(shù)到最深,然后從最后一個(gè)節(jié)點(diǎn)開始,反轉(zhuǎn)節(jié)點(diǎn)的指針 ,不斷返回上一個(gè)調(diào)用, 也不斷反轉(zhuǎn)上一個(gè)指針,一直到最終的讓舊鏈表的頭結(jié)點(diǎn)指向None。
class Solution:
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        curr = head
        
        #第一個(gè)比較條件,是對特殊輸入None的保證
        if curr == None or curr.next ==None:
            return curr

        newhead = self.reverseList(curr.next)
        #這一步更改節(jié)點(diǎn)指針,第一個(gè)next是對curr下一個(gè)節(jié)點(diǎn)的索引,第二個(gè)next才是更改指針操作
        curr.next.next = curr
        curr.next = None

        return newhead

代碼在Example中執(zhí)行的結(jié)果:

  • 調(diào)用到curr=5,所有調(diào)用結(jié)束,新的鏈表頭就是節(jié)點(diǎn)5,這也是最終函數(shù)要返回的新的頭結(jié)點(diǎn)
  • 所有調(diào)用結(jié)束以后,開始從深到淺的依次執(zhí)行下面兩句代碼。具體化就是:
    curr = 4,4.next.next = 4 的意思可以分兩步4.next=5, 5.next = 4,最終結(jié)果就是節(jié)點(diǎn)5的指針指向4。然后4的指針指向None,再返回上一個(gè)調(diào)用
    (此時(shí),1->2->3->4并且5->4->None)
    curr = 3,3.next.next = 3 即4的指針指向3,3的指針指向None,再返回上一個(gè)調(diào)用
    (此時(shí),1->2->3并且5->4->3->None)
    不斷返回上一個(gè)調(diào)用,最終得到反轉(zhuǎn) 的列表,并且返回newhead=5
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • # LinkedList系列總結(jié) 24/27 [x] Easy [x] Medium [x] Hard 這種題,多...
    Joshua介凌閱讀 557評論 0 0
  • 不足的地方請大家多多指正,如有其它沒有想到的常問面試題請大家多多評論,一起成長,感謝!~ String可以被繼承嗎...
    啟示錄是真的閱讀 3,067評論 3 3
  • 1. 逆序打印鏈表(單鏈表) 給定單鏈表,從尾到頭打印每個(gè)節(jié)點(diǎn)的值,不同的值之間用空格隔開。比如:1>2>3>4>...
    少冰三hun甜閱讀 4,135評論 1 12
  • 程序沒敲了多少,臭毛病倒是一身,文章標(biāo)題文件夾命名首先想到的就是helloword,然后就是日期,簡單粗暴,...
    爽歪歪吖閱讀 473評論 0 0
  • 毋庸置疑人類是自然之精華,是萬物之靈長,是個(gè)偉大的物種。在體力、智力、適應(yīng)能力、壽命等方面碾壓其他物種,同時(shí)衍生出...
    放松的松閱讀 362評論 0 0

友情鏈接更多精彩內(nèi)容