判斷乙個鍊錶是否為回文結構(高階)
給定乙個鍊錶,請判斷該鍊錶是否為回文結構。
輸入描述:
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...