突然發現python語法的優美和簡潔,清爽,不拖泥帶水。
龜叔(guido van rossum)就說:除了不能生孩子,python真的能幹很多事。
# definition for singly-linked list.
# 如果位元組面試:時間複雜度o(n) ,空間複雜度o(1)
class listnode:
def __init__(self, x):
self.val = x
self.next = none
# 在規定的時間複雜度和空間複雜度的條件下來判斷是否為回文鍊錶。
class solution():
def ispalindrome(self,head)->bool:
if head==none or head.next==none:
return true
dummy = listnode(-1)
dummy.next = head
slow = dummy
fast = dummy
while fast and fast.next:
slow = slow.next
fast = fast.next.next
fast = slow.next
slow.next = none
slow = dummy.next
# 將後半段的鍊錶逆置
pre = none
while fast:
temp = fast.next
fast.next =pre
pre = fast
fast = temp
while pre:
if pre.val!= slow.val:
return false
pre = pre.next
slow = slow.next
return true
if __name__ == "__main__":
s = solution()
n2 = listnode(1)
n3 = listnode(2)
n4 = listnode(1)
n2.next = n3
n3.next = n4
n4.next = none
print(s.ispalindrome(n2))
判斷鍊錶是否為回文結構
給定乙個鍊錶的頭節點 head,請判斷該鍊錶是否為回文 正反結構相同 結構。如果鍊錶長度為 n,時間複雜度達到 o n 額外空間複雜度達到 o 1 參考 程式設計師 面試指南 放入棧,時間複雜度o n 空間複雜度o n bool ispalindrome1 node head while null ...
判斷鍊錶是否回文?
given a singly linked list,determine if it is a palindrome.思路 兩個指標,乙個正常遞推,另乙個遞推速度為第乙個的兩倍 node.next.next 到末,分兩種情況 1.奇數個元素,最後快指標指向最後乙個元素 p2.next null 2....
鍊錶 判斷乙個鍊錶是否為回文鍊錶
思路1 找到中間節點然後把後面的翻轉,需要斷開鍊錶 然後比較和頭節點開始的前段,最後要是後半段的游標可以走到最後說明是回文否則不是 思路2 整體翻轉比較 思路3 借助乙個棧存放前半段的元素,然後和後半段的比較 public boolean ispalindrome listnode head lis...