領釦——234.迴文連結串列
阿新 • • 發佈:2018-11-09
領釦——234.迴文連結串列
請判斷一個連結串列是否為迴文連結串列。
示例 1:
輸入: 1->2
輸出: false
示例 2:
輸入: 1->2->2->1
輸出: true
思路是翻轉後一部分的連結串列,然後用雙指標從每部分頭開始比較,一樣返回true,不一樣返回false
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public boolean isPalindrome(ListNode head) { if(head==null||head.next==null) return true; int length=0; //初始化指向頭結點 ListNode tmp=head; while(tmp!=null){ length++; tmp=tmp.next; } //算出連結串列中間的位置 int halfLength=length/2; //把指標移到中間位置 tmp=head; for(int i=0;i<halfLength;i++){ tmp=tmp.next; } //開始反轉後一部分的連結串列 ListNode pre=tmp; ListNode pNode=tmp.next; ListNode next=null; while(pNode!=null){ next=pNode.next; pNode.next=pre; pre=pNode; pNode=next; } //比較兩部分連結串列的每個值是不是一樣 for(int i=0;i<halfLength;i++){ if(head.val!=pre.val) return false; head=head.next; pre=pre.next; } return true; } }