2 7回文鍊錶

2021-10-03 08:38:07 字數 1695 閱讀 6236

public

class

test

; node head =

create

(arr)

;boolean flag =

ishuiwen

(head)

; system.out.

println

(flag);}

public

static

boolean

ishuiwen

(node head)

int len =0;

for(node p=head.next;p!=null;p=p.next)

int i=1;

stack

s =newstack

<

>()

;for

(node p=head.next;i<=len;p=p.next)

else

if(s.

pop(

)!=p.val)

} i++;}

return

true;}

//建立單鏈表

public

static node create

(int

arr)

return head;}}

class

node

}

public

class

test

; node head =

create

(arr)

;boolean flag =

ishuiwen

(head)

; system.out.

println

(flag);}

public

static

boolean

ishuiwen

(node head)

//求鍊錶長度

int len=0;

for(node p=head.next;p!=null;p=p.next)

//找鍊錶中間節點

node midnode = head;

//指向偽頭節點(鍊錶中間位置) 如果len為奇數將第len/2+1個節點作為偽頭節點

for(

int i=

1;i<=len;i++

)else

}//反轉鍊錶右半段

node p=midnode.next;

midnode.next=null;

while

(p!=null)

//驗證鍊錶是否為回文鍊錶

p = midnode.next;

node q = head.next;

boolean flag =

true

;while

(p!=null)

p=p.next;

q=q.next;

}//還原鍊錶

p=midnode.next;

midnode.next=null;

while

(p!=null)

return flag;

}class

node

}

234 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true首先建立兩個指標指向鍊錶,然後使其中乙個指標指向鍊錶中間,這裡可以使用另乙個指標快速移動,當另乙個指標移動速度是前一根指標的一倍時,就可以使slow指標到一半,而fast指標遍歷完了。使用...

32 回文鍊錶

解析 1.利用棧求解 首先遍歷鍊錶獲取鍊錶的長度len 根據鍊錶的長度,將鍊錶的前半部分壓入棧,將後半部分依次與彈棧的元素比較看是否一致,一致則為回文鍊錶 這裡注意的是鍊錶的後半部分的開始位置 鍊錶長度的奇偶 public boolean ispalindrome1 listnode head 前半...

234 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?正確思路是1.先找到鍊錶的中點 通過快慢雙指標,快指標一次移動兩個單位,慢指標一次移動乙個單位,當快指標頂到頭的時...