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

    一次过

  • 相关阅读:
    [NOIP2020]T2字符串匹配
    【CSGRound2】逐梦者的初心(洛谷11月月赛 II & CSG Round 2 T3)
    【CF1225E Rock Is Push】推岩石
    [HAOI2016]食物链
    求先序排列
    图书管理员
    合并果子
    联合权值
    和为0的4个值
    玩具谜题
  • 原文地址:https://www.cnblogs.com/lailailai/p/4639246.html
Copyright © 2011-2022 走看看