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.先找到鍊錶的中點 通過快慢雙指標,快指標一次移動兩個單位,慢指標一次移動乙個單位,當快指標頂到頭的時...