zoukankan      html  css  js  c++  java
  • LeetCode 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?

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        bool isPalindrome(ListNode* head) {
            int len = 0;
            ListNode* node = head;
            while (node != NULL) {
                node = node->next;
                len++;
            }
            if (len < 2) {
                return true;
            }
            
            int step = len / 2;
            ListNode* prev = NULL;
            node = head;
            while (step-- > 0) {
                prev = node;
                node = node->next;
            }
            prev->next = NULL;
            
            ListNode* head1 = head;
            ListNode* head2 = reverse(node);
            while (head1 != NULL) {
                if (head1->val != head2->val) {
                    return false;
                }
                head1 = head1->next;
                head2 = head2->next;
            }
            return true;
        }
        
        ListNode* reverse(ListNode* head) {
            ListNode* prev = NULL;
            ListNode* node = head;
            while (node != NULL) {
                ListNode* next = node->next;
                node->next = prev;
                prev = node;
                node = next;
            }
            return prev;
        }
    };
    

    一次过

  • 相关阅读:
    「NOI2017」蔬菜 解题报告
    线性代数
    idea创建maven的web工程
    logback和slf4j的使用之logger使用
    英雄之言 罗隐
    论英雄
    英雄--偶得佳文不知出处
    日志
    延迟加载线程安全的单例--最佳方式,通过内部类
    linux下安装jdk8
  • 原文地址:https://www.cnblogs.com/lailailai/p/4639246.html
Copyright © 2011-2022 走看看