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;
        }
    };
    

    一次过

  • 相关阅读:
    getSupportFragmentManager要用在FragmentActivity及其子类中
    nginx 配置php
    openwrt 安装 ser2net 配置
    stm32 hid 键盘描述
    外部中断实验
    stm32 UART串口
    stm32 按键
    小结-stm32 驱动LED灯
    ASCII 计算机码
    debian/ubuntu安装桌面环境
  • 原文地址:https://www.cnblogs.com/lailailai/p/4639246.html
Copyright © 2011-2022 走看看