判斷乙個鍊錶是否為回文結構 高階

2021-10-08 23:33:08 字數 1526 閱讀 9485

判斷乙個鍊錶是否為回文結構(高階)

給定乙個鍊錶,請判斷該鍊錶是否為回文結構。

輸入描述:

n

nn 表示鍊錶的長度

a

ia_i

ai​ 表示鍊錶的各個節點的值。

輸出描述:

如果為回文結構輸出 「true」 , 否則輸出 「false」。

示例1輸入

5

1 2 3 2 1

輸出
true
備註:

1 ≤n

≤2∗1

06

1 \leq n \leq 2*10^6

1≤n≤2∗

106−10

6≤ai

≤106

-10^6 \leq a_i \leq 10^6

−106≤a

i​≤1

06題解:法一:在基礎版本題目中,我們是將所有的元素都壓入棧中,然後挨個判斷,其實沒必要,想想判斷回文串,是不是分別從最左和最右開始逐個遍歷。同樣的,我們也可以這樣做,將鍊錶的右半部分壓入棧中,然後只遍歷一半就行。

法二:將鍊錶右半部分反轉,然後從首和尾逐個比較。

注意:此題有個技巧,通過快慢指標來找中間節點。

**:

# include

using

namespace std;

struct list_node

;list_node *

input_list

(void

)else

}return phead;

}void

check

(list_node * head)

list_node *h1 = head,

*h2 = head;

while

(h2-

>next && h2-

>next-

>next)

h2 = h1-

>next;

//右邊第乙個節點

h1->next =

null

;//mid->next -> null

list_node *h3 =

null

;while

(h2)

h3 = h1;

//儲存最後邊的節點

h2 = head;

//左邊第乙個節點

bool flag =

true

;while

(h1 && h2)

h1 = h1-

>next;

h2 = h2-

>next;

} h1 =

null

;//恢復鍊錶

while

(h3)

puts

(flag ?

"true"

:"false");

}int main (

)

判斷乙個鍊錶是否為回文結構

題目 給定乙個鍊錶的頭結點head,判斷該鍊錶是否為回文結構。例如 1 2 1,返回true 1 2 2 1,返回true 15 6 15,返回true 1 2 3,返回false 方法一 利用棧結構實現。從頭遍歷鍊錶,遍歷的同時把加點一次壓入棧中。因為棧為先進後出結構,所以遍歷完成後,從棧頂到棧底...

判斷乙個鍊錶是否為回文結構

這道題的做法是首先找到列表中間的結點,然後把中間結點之後的鍊錶翻轉,然後同時遍歷兩個鍊錶,比較結點的資料是否相同,如果有不同的,返回false,遍歷完說明資料相同,返回true public class palindromelist fast fast.next slow slow.next ret...

判斷乙個鍊錶是否為回文結構

演算法專題導航頁面 題目描述 給定乙個鍊錶,請判斷該鍊錶是否為回文結構。輸入描述 n 表示鍊錶的長度。val 表示鍊錶節點的值 輸出描述 如果為回文結構輸出 true 否則輸出 false 示例1 輸入5 1 2 3 2 1 輸出true 備註 1 n 2000000 1000000 val 100...