zoukankan      html  css  js  c++  java
  • 回文链表

    什么是回文?举两个栗子

    上海自来水来自海上

    黄山落叶松叶落山黄

    如何判断链表是不是回文呢?

    1. 找到链表的中间节点
    2. 将链表后半部分反转
    3. 比较链表前半部分和后半部分是否相同
    struct ListNode {
        char value;
        ListNode *next;
    };
    
    ListNode* getMiddleNode(ListNode *head)
    {
        if(head == NULL || head->next == NULL)
            return head;
        ListNode *fast = head;
        ListNode *slow = head;
        while (fast->next != NULL)
        {
            fast = fast->next;
            slow = slow->next;
            if(fast->next != NULL)
                fast = fast->next;
        }
        return slow;
    }
    
    ListNode* reverseListRecursive(ListNode *head)
    {
        if(head == NULL || head->next == NULL)
            return head;
        ListNode *newHead = reverseListRecursive(head->next);
        head->next->next = head;
        head->next = NULL;
        return newHead;
    }
    
    bool isPalindrome(ListNode *head)
    {
        if (head == NULL || head->next == NULL)
            return true;
        ListNode *middleNode = getMiddleNode(head);
        ListNode *rbegin = reverseListRecursive(middleNode);
        ListNode *lbegin = head;
        while (rbegin != NULL) {
            if (lbegin->value != rbegin->value) {
                return false;
            }
            lbegin = lbegin->next;
            rbegin = rbegin->next;
        }
        return true;
    }

    完美。

  • 相关阅读:
    HDU 1022 Train Problem I
    HDU 1702 ACboy needs your help again!
    HDU 1294 Rooted Trees Problem
    HDU 1027 Ignatius and the Princess II
    HDU 3398 String
    HDU 1709 The Balance
    HDU 2152 Fruit
    HDU 1398 Square Coins
    HDU 3571 N-dimensional Sphere
    HDU 2451 Simple Addition Expression
  • 原文地址:https://www.cnblogs.com/gattaca/p/7857909.html
Copyright © 2011-2022 走看看