24.反轉鏈表

題目描述

輸入一個鏈表,反轉鏈表後,輸出新鏈表的表頭。

思路:創建3個指針,分別指向前一個節點,當前節點和下一個節點,以防止反轉鏈表的過程中出現斷裂。

python題解:

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # 返回ListNode
    def ReverseList(self, pHead):
        # write code here
        if not pHead:
            return None
        pPre=None
        pNode=pHead
        pReHead=ListNode(None)
        while pNode:
            pNext=pNode.next
            if not pNext:
                pReHead=pNode
            pNode.next=pPre
            pPre=pNode
            pNode=pNext
        return pReHead

 

錯誤一:

在上述代碼中如果pPre=ListNode(None),那麼會告訴你

用例:
{1,2,3,4,5}

對應輸出應該爲:

{5,4,3,2,1}

你的輸出爲:

{5,4,3,2,1%d format: a number is required, not NoneType

 

錯誤二,運行超時:

經過檢測,發現如果讓pPre初始值爲頭結點,在鏈表是環形鏈表時,pNext永遠不可能爲空,這樣無法退出循環,無法終止。但如果pPre初始爲空,那麼對pNext判空的話是很容易進行的。

舉個例子:

 

###這個代碼在牛客上運行超時,就是因爲沒能跳出環形鏈表
class Solution:
    # 返回ListNode
    def ReverseList(self, pHead):
        # write code here
        if not pHead:
            return None
        pPre = pHead
        pNode = pHead.next
        pReHead = ListNode(None)
        while pNode:
            pNext = pNode.next
            if not pNext:
                pReHead = pNode
            pNode.next = pPre
            pPre = pNode
            pNode = pNext
        return pReHead

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章