題目描述
輸入一個鏈表,反轉鏈表後,輸出新鏈表的表頭。
思路:創建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