回文鍊錶(單向)

2021-10-09 02:38:19 字數 2360 閱讀 9144

請判斷乙個鍊錶是否為回文鍊錶。

示例 1:

輸入: 1->2

輸出: false

示例 2:

輸入: 1->2->2->1

輸出: true

高階:

你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?

listnode的定義**:

# definition for singly-linked list.

class listnode:

def __init__(self, x):

self.val = x

self.next = none

**1:

# -*- coding: utf-8 -*-

#!/usr/bin/env python

"""@author: wowlnan

@github:

@blog:

"""class solution:

def ispalindrome(self, head: listnode) -> bool:

a=temp=head

while temp!=none:

temp=temp.next

l=len(a)

if l==1:

return true

mid=int(l/2)

for i in range(mid):

if a[i]!=a[l-1-i]:

return false

return true

**2:

# -*- coding: utf-8 -*-

#!/usr/bin/env python

"""@author: wowlnan

@github:

@blog:

"""class solution:

def ispalindrome(self, head: listnode) -> bool:

if head==none:

return true

temp=head

i=0while temp!=none:

i+=1

temp=temp.next

l=imid=int(l/2)

temp=head

i=0flag=l%2==0

left=''

right=''

while temp!=none:

if i這裡o(1)空間複雜度是?

如果是指單個鍊錶指標的空間的常數,兩段**似乎都不符合要求。

那麼試試**3:

# -*- coding: utf-8 -*-

#!/usr/bin/env python

"""@author: wowlnan

@github:

@blog:

"""class solution:

def ispalindrome(self, head: listnode) -> bool:

if head==none:

return true

left=head

i=0while left!=none:

i+=1

left=left.next

l=imid=int(l/2)

i=0left=head

right=head

while right!=none:

if i==mid:

break

right=right.next

i+=1

pre=none

cur=right

nex=none

righthead=none

while cur!=none:

nex=cur.next

if nex==none:

righthead=cur

cur.next=pre

pre=cur

cur=nex

right=righthead

i=0while left!=none and right!=none and i原理簡單就不說了。時間複雜度實際應該是3遍遍歷鍊錶,即o(n),空間也滿足o(1)。

注:最後乙個迴圈i的存在只是為了比較清晰說明迴圈的終止位置或者說是迴圈次數,即 n / 2。

鍊錶 單向鍊錶

討論單鏈表之前,我們先來討論下面這個問題。順序表存在的一些問題 中間 頭部的插入刪除,時間複雜度為o n 增容需要申請新空間,拷貝資料,釋放舊空間。會有不小的消耗。增容一般是呈2倍的增長,勢必會有一定的空間浪費。例如當前容量為100,滿了以後增容到200,我們再繼續插入了5個資料,後面沒有資料插入了...

鍊錶(單向鍊錶,雙向鍊錶)

首先鍊錶是以節點的方式儲存資料的,每個節點包含資料域 data 節點域 next 鍊錶的每個節點在計算機中儲存的位置是不連續的和隨機的,優點就是資料的插入和刪除比較好,而查詢資料效率不是太好 因為鍊錶無法像靜態資料一樣隨機讀取資料,必須按照順序找到對應的資料為止 單向鍊錶就像是火車,所有的節點串聯成...

字元鍊錶(單向)C語言

建立乙個鍊錶,該鍊錶可以存放從鍵盤輸入的任意長度的字串,以按下回車鍵作為輸入的結束。統計輸入的字元個數並將其字串輸出。include include struct symbol struct symbol createsym struct symbol p void listsym struct s...