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

2022-08-10 08:33:12 字數 774 閱讀 5921

給定乙個鍊錶的頭節點head, 請判斷該鍊錶是否為回文結構。 例如: 1->2->1, 返回true。 1->2->2->1, 返回true。

15->6->15, 返回true。 1->2->3, 返回false。

高階: 如果鍊錶長度為n, 時間複雜度達到o(n), 額外空間複雜度達到o(1)。

解法一:

使用快慢指標將slow指向的鍊錶的一半壓入進棧中,然後slow繼續向後走,同時棧中彈出元素,對比

對於奇數個鍊錶 1->2->3->2->1 slow指向3

對於偶數個鍊錶 1->2->2->1 slow指向第乙個2

需要的空間複雜度為o(n/2)

public static boolean ispalindrome1(node node)

slow = slow.next;

if(stack.peek().val != slow.val)

while(!stack.empty() && slow != null)

slow = slow.next;

}if(flag && stack.empty() && slow == null)else

}

解法二:

使用快慢指標,找到鍊錶的中點,將中點右邊的鍊錶均反轉,然後兩頭重新遍歷,

對比,若有不同的則返回false,否則返回true

注意在返回之前,要將鍊錶重新整理回原來的順序

1->2->3->2->1  變為 1->2->3<-2<-1

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

題目 給定鍊錶的頭節點,判斷該鍊錶是否為會問結構 如果鍊錶的長度為n,時間複雜度達到o n 額外空間複雜度達到o 1 方法一 public class node public boolean ispalindromel node head while head null head head.next...

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

方法1 利用棧 t o n s o n 將鍊錶壓入棧,利用棧的先進後出逆序出鍊錶對比原鍊錶各節點值 public static boolean ispalindome1 node head cur head while s.isempty return true 方法2 利用棧 t o n s o ...

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

1 題目描述 給定乙個鍊錶,請判斷該鍊錶是否為回文結構。2 思路 對於單鏈表而言,判斷乙個鍊錶是否為回文結構,可以先找出鍊錶的中間結點,然後將鍊錶的後半部分反轉 從鍊錶兩端開始逐一比較,如果不相等則返回false。2 a 如何尋找鍊錶的中間位置,使用雙指標 設定乙個快指標 pfast 乙個慢指標 p...