LeetCode题解:Palindrome Linked List

来源:互联网 发布:淘宝手机端套餐 编辑:程序博客网 时间:2024/06/05 03:39

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?

题意:给定一个单向链表,判断是否为回文

解决思路:假设一个链表是回文,那么把链表分割为1…n/2,n/2+1…n两个部分,这两个部分肯定是相同的(把第二部分顺序逆转过来或者逆转第一部分)。所以如果我们能把任何一个部分的链表顺序逆转过来,就可以解决这个问题。

那么要怎么逆转过来呢?首先可以用快慢指针得到中间结点(一个指针一次向前移动一个结点,一个移动两个结点),而且在指针移动的同时逆转顺序。

public boolean isPalindrome(ListNode head) {        if(head == null || head.next == null){            return true;        }        ListNode pointerA = head;        ListNode pointerB = head;        ListNode pre = null;        ListNode next = pointerA.next;        while(pointerB.next != null && pointerB.next.next != null){            pointerB = pointerB.next.next;            pre = pointerA;            pointerA = next;            next = next.next;            pointerA.next = pre;        }        if(pointerB.next == null){            pointerA = pointerA.next;        }        while(next != null){            if(next.val != pointerA.val){                return false;            }else{                next = next.next;                pointerA = pointerA.next;            }        }        return true;    }
0 0
原创粉丝点击