LeetCode234_PalindromeLinkedList(連結串列結構變化圖解)Java
阿新 • • 發佈:2018-11-26
思路:是把後半段的原地連結串列反轉然後和前半段進行比較(當然你也可以反轉前半段)執行時間稍微比第二種慢一些,但是符合題目O(1)空間複雜度的要求
//連結串列原地轉置實現o(1)空間複雜度 public static boolean isPalindrome3(ListNode head) { ListNode slow=head; ListNode fast=head; if(fast==null||fast.next==null)//0個節點或是1個節點 return true; while(fast.next!=null&&fast.next.next!=null) { fast=fast.next.next; slow=slow.next; } //對連結串列後半段進行反轉 ListNode midNode=slow; ListNode firNode=slow.next;//後半段連結串列的第一個節點 ListNode cur=firNode.next;//插入節點從第一個節點後面一個開始 firNode.next=null;//第一個節點最後會變最後一個節點 while(cur!=null) { ListNode nextNode=cur.next;//儲存下次遍歷的節點 cur.next=midNode.next; midNode.next=cur; cur=nextNode; } //反轉之後對前後半段進行比較 slow=head; fast=midNode.next; while(fast!=null) { if(fast.val!=slow.val) return false; slow=slow.next; fast=fast.next; } return true; }