判斷鍊錶是不是回文數

2021-10-01 17:33:28 字數 1329 閱讀 9144

主要思想,先找到中間結點,對後半段鍊錶反轉,然後一一對比資料,看看是不是相同,相同就是回文鍊錶,不同就不是

import sys

# 引用當前資料夾下的single_linked_list

from singly_linked_list import singlylinkedlist

def reverse(head):

#引入新結點反轉兩個鍊錶之間的結構

reverse_head = none

while head:

temp_next = head.next

head.next = reverse_head

reverse_head = head

head = temp.next

return revese_head

def is_palindrome(l):

# 利用快慢指標先找到中間結點

l.print_all()

slow = l._head

fast = l._head

position = 0

while fast and fast.next:

slow = slow.next

fast = fast.next.next

position += 1

#反轉剩餘一半結點,然後對比每個資料結點的資料

reverse_node = reverse(slow)

head_node = l._head

is_palin = true

while (head_node and reverse_node):

if (head_node.data == reverse_node.data):

head_node = head_node.next

reverse_node = reverse_node.next

else:

is_palin = false

break

return is_palin

if __name__ == '__main__':

# the result should be false, true, true, true, true

test_str_arr = ['ab', 'aa', 'aba', 'abba', 'abcba']

for str in test_str_arr:

l = singlylinkedlist()

for i in str:

l.insert_value_to_head(i)

print(is_palindrome(l))

leetcode 234 判斷是不是回文鍊錶

聰明的我想到了利用棧先進後出的特性,求出鍊錶的長度之後前一半入棧,後一半出棧的方法,雖然簡單易懂,但是效率有點低,貼 definition for singly linked list.struct listnode listnode int x val x next nullptr listnod...

判斷一條單向鍊錶是不是 回文

題目 判斷一條單向鍊錶是不是 回文 思路一 採用快慢指標,慢指標入棧,當快指標為null時,出棧和慢指標比較即可。時間複雜度o n 空間複雜度o n 優點 比較好實現,且沒有修改鍊錶 缺點 需要分配記憶體 include include include typedef int elem typede...

判斷是不是回文鍊錶的方法 3種

struct treelist treelist int a 使用棧來做,這是最簡單的方法,空間複雜度為o n bool isre 1 treelist p while p return true 使用快慢指標尋找中點,能夠比普通的暴力解法省一半的空間 bool isre 2 treelist p ...