leetcode 234题回文链表
生活随笔
收集整理的這篇文章主要介紹了
leetcode 234题回文链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
回文就是正著念,反著念是一樣的,給出了3種解
首先正著最先得數得在右半部分會最后一個,滿足棧的先進后出特性所以可以用一個棧來解決這個問題
用N個空間
這太簡單了不說了
public static boolean isPalindromeList1(ListNode head){if(head==null||head.next==null){return true;}Stack<Integer> stack = new Stack<>();ListNode p = head;while(p!=null){stack.push(p.val);p=p.next;}p = head;while(!stack.isEmpty()){if(stack.pop()!=p.val){return false;}p=p.next;}return true;}用一半的空間
可以從鏈表的中點開始,把后半部分壓入棧中,然后跟鏈表的前半部分對比全相同就滿足回文
快慢指針法尋找中點,注意循環判斷的條件是棧為空,比判斷鏈表中點的位置要簡單。。有時候可以換個思路
O(1)空間復雜度
思路簡單,把鏈表后半部分逆序然后兩個指針往中間走就行
難在邊界的判斷上
定義三個指針 tail保存已經逆好序的倆表,cur指向要逆序的結點,old保存下一個結點。循環條件為cur!=null cur指向tail 然后tail=cur 然后 cur = old
根據奇偶長度不同,判斷條件為兩個端點誰指向空就結束(判斷回文)
最后別忘了把順序恢復到正常
總結
以上是生活随笔為你收集整理的leetcode 234题回文链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对于软件的误区
- 下一篇: 激光打印机硒鼓加分量及寿命