206. 反轉(zhuǎn)鏈表(easy)

反轉(zhuǎn)一個(gè)單鏈表。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL

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

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        reversehead = None
        p = head
        p_pre = None
        while p:
            p_next = p.next
            if not p_next:
                reversehead = p
            p.next = p_pre
            p_pre = p
            p = p_next
        return reversehead
  • 此題屬于經(jīng)典題,之前做過(guò)很多次了,拿到之后還是無(wú)從下手。。。劍指offer上講的很詳細(xì),關(guān)鍵是考慮清楚三個(gè)節(jié)點(diǎn)的情況,其中現(xiàn)有遍歷的節(jié)點(diǎn)指針指向其之前的節(jié)點(diǎn),這里特別注意,為了防止鏈表斷開(kāi),我們需要事先保存好現(xiàn)在節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn),所以總的來(lái)說(shuō)會(huì)有四個(gè)變量:reversehead反轉(zhuǎn)后的頭節(jié)點(diǎn),p現(xiàn)有遍歷到的節(jié)點(diǎn),p_pre現(xiàn)有節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn),p_next現(xiàn)有節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)
  • 理清這個(gè)情況之后就簡(jiǎn)單了,接下來(lái)需要判斷循環(huán)終止條件??紤]到反轉(zhuǎn)后的鏈表頭節(jié)點(diǎn)是反轉(zhuǎn)前鏈表的尾節(jié)點(diǎn),所以當(dāng)p_next是None時(shí)說(shuō)明鏈表遍歷結(jié)束,反轉(zhuǎn)結(jié)束。
時(shí)間復(fù)雜度:O(n),空間復(fù)雜度O(1)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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