初级-链表-回文链表

回文链表

题目:

请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

思路:

原思路:将链表遍历一遍,存入数组,但空间复杂度为O(n)不符合要求
正确思路:用快慢数组找出链表的中间位置,并将后部分反转,进行比较

代码:

public boolean isPalindrome(ListNode head) {
        if(head==null||head.next==null)
            return true;
        ListNode slow = head;
        ListNode fast = head.next;     
        //快慢指针
        while((fast!=null) && (fast.next!=null))
        {
            slow=slow.next;
            fast=fast.next.next;
        }
        ListNode p = reverseList(slow.next);//之前写的反转函数
        while(p!=null)
        {
            if(head.val!=p.val)
                return false;
            head=head.next;
            p=p.next;
        }
        return true;
    }

猜你喜欢

转载自blog.csdn.net/ada_dc/article/details/81456123