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

2021-08-07 10:22:04 字數 909 閱讀 5968

題目:給定乙個鍊錶的頭結點head,判斷該鍊錶是否為回文結構。

例如:1-2-1,返回true;

1-2-2-1,返回true;

15-6-15,返回true;

1-2-3,返回false;

方法一:利用棧結構實現。從頭遍歷鍊錶,遍歷的同時把加點一次壓入棧中。因為棧為先進後出結構,所以遍歷完成後,從棧頂到棧底的節點值出現順序與原鍊錶從頭到尾出現順序反過來。如果是回文結構值出現的次序是一樣的。需要乙個額外的棧結構,o(n)的空間。

public class node

public boolean ispalindrome1(node head)

方法二:把整個鍊錶的右半部分壓入棧中,壓入完成後,在檢查棧頂到棧底的值出現的順序是否和鍊錶的左半部分值順序一致。

1-2-2-1,左半部分是1,2,右半部分是2,1

public boolean ispalindrome2(node head)

node right = head.next;

node cur = head;

while(cur.next!=null&&cur.next.next!=null){

right = right.next;

cur= cur.next.next;//找中間節點

stackstack = new stack();

while(right!=null){

stack.push(right);

right = right.next;//從中間節點往後開始壓入棧中

while(!stack.isempty()){

if(head.value!=stack.pop().value){

return false;

head = head.next;

return true;

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

這道題的做法是首先找到列表中間的結點,然後把中間結點之後的鍊錶翻轉,然後同時遍歷兩個鍊錶,比較結點的資料是否相同,如果有不同的,返回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...

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

題目 給定乙個鍊錶的頭節點head,請判斷該鍊錶是否為回 文結構。例如 1 2 1,返回true。1 2 2 1,返回true。15 6 15,返回true。1 2 3,返回false。高階 如果鍊錶長度為n,時間複雜度達到o n 額外空間複雜 度達到o 1 普通演算法 運用棧,將資料域的內容放入棧...