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

2021-10-16 22:36:15 字數 1121 閱讀 2791

(1)題目描述:

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

(2)思路:對於單鏈表而言,判斷乙個鍊錶是否為回文結構,可以先找出鍊錶的中間結點,然後將鍊錶的後半部分反轉;從鍊錶兩端開始逐一比較,如果不相等則返回false。

(2)-(a):如何尋找鍊錶的中間位置,使用雙指標

設定乙個快指標(pfast),乙個慢指標(pslow),快指標一次移動兩個位置,慢指標一次移動乙個位置,當快指標移到鍊錶末端時,慢指標正好移動到鍊錶的中間位置。

如上圖,對於如果鍊錶結點個數為偶數,當慢指標移到中間結點時,pfast->next->next=null;如果為奇數,當慢指標移到中間結點時,pfast->next=null。

(2)-(b):後半部分的鍊錶反轉

以v為當前結點,更改v->next指向u後,v->next不再指向w,所以在此之前要用乙個結點pnext來儲存w;同時也需要乙個結點來儲存當前結點的前乙個結點,記為pprev;反轉鍊錶後需要乙個頭結點來返回,記為preversehead,如果當前結點的下乙個結點為null,則當前結點就是反轉鍊錶的頭結點。

(3)**

struct listnode 

;class

solution

//將鍊錶的後半部分反轉

pfast = pslow-

>next;

pslow-

>next =

null

; listnode *pnext =

null

;while

(pfast !=

null

) pfast = head;

bool reverse =

true

;while

(pslow !=

null

&& pfast !=

null

) pslow = pslow-

>next;

pfast = pfast-

>next;

}return reverse;}}

;

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

題目 給定鍊錶的頭節點,判斷該鍊錶是否為會問結構 如果鍊錶的長度為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 ...

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

給定乙個鍊錶的頭節點head,請判斷該鍊錶是否為回文結構。例如 1 2 1,返回true。1 2 2 1,返回true。15 6 15,返回true。1 2 3,返回false。高階 如果鍊錶長度為n,時間複雜度達到o n 額外空間複雜度達到o 1 解法一 使用快慢指標將slow指向的鍊錶的一半壓入...