234. Palindrome Linked List

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?
这道题如果只想完成是很简单的,但是像高效的完成就需要绕一点弯了。
使用快慢指针,一个走一步一个走两步,这样可以找到中间的那个节点,慢指针在走的时候同时把链表反向,这样找到中间节点的时候就可以一个往前一个往后逐一比较元素值是否相等了。
这里要注意的是什么时候停下正好停在中心节点,还有节点是奇数个和偶数个时的不同。

var isPalindrome = function(head) {
    if (!head)
        return true;
    var pre = null;
    var slow = head;
    var fast = head;
    while (fast&&fast.next) {
        fast = fast.next.next;
        var tamp = slow.next;
        slow.next = pre;
        pre = slow;
        slow = tamp;
    }
    if (fast)
        slow = slow.next;
    while (slow&&slow.val===pre.val) {
        slow = slow.next;
        pre = pre.next;
    }
    return !slow;
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容