1. 程式人生 > >LeetCode234_PalindromeLinkedList(連結串列結構變化圖解)Java

LeetCode234_PalindromeLinkedList(連結串列結構變化圖解)Java

思路:是把後半段的原地連結串列反轉然後和前半段進行比較(當然你也可以反轉前半段)執行時間稍微比第二種慢一些,但是符合題目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;

		 

	 }