Python判斷是否為回文鍊錶

2021-10-07 11:51:53 字數 1207 閱讀 4376

突然發現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...