leetcode题解-234. Palindrome Linked List

来源:互联网 发布:来自故宫的礼物 淘宝 编辑:程序博客网 时间:2024/06/05 00:09
Given a singly linked list, determine if it is a palindrome.Follow up:Could you do it in O(n) time and O(1) space?

题目是想要判断一个链表的值是否满足回文条件。要求使用O(1)的空间复杂度可能是本题的难点。这就要求我们不能使用别得数据结构对链表的值进行保存在判断。所以我一开始就想能否使用链表翻转来实现,因为感觉这是唯一的突破口==但是如果对原始链表进行翻转,如果in-place则会丢失元链表,否则就会使用额外的存储空间。然后继续分析本题,会发现如果链表是回文,那么前半部分和后半部分一定是一样的。所以我肯可以将后半部分反转,然后再跟前半部分进行比较。这样效果是最好的。代码如下所示:

    public static boolean isPalindrome1(ListNode head) {        ListNode fast=head, slow=head;        while(fast != null && fast.next != null){            fast = fast.next.next;            slow = slow.next;        }        //如果链表长度为奇数        if(fast != null) slow = slow.next;        ListNode end=null, tmp;        while(slow != null){            tmp = slow.next;            slow.next = end;            end = slow;            slow = tmp;        }        while(end != null){            if(end.val != head.val)                return false;            end = end.next;            head = head.next;        }        return true;    }
原创粉丝点击