zoukankan      html  css  js  c++  java
  • Palindrome Linked List leetcode

    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?

    Subscribe to see which companies asked this question

     
    思路:
    1.利用快慢两个指针找到中间结点
    2.从中间结点下一个结点开始逆置链表,得到新的链表
    3.新的链表与原来链表依次比较结点,如有不同,return false
     
    思路很清晰,代码直接写在leetcode网站上了,没有调试,一次性AC通过,很有成就感
    bool isPalindrome(ListNode* head) {
        if (head == nullptr || head->next == nullptr)
            return true;
        // 寻找中间结点
        ListNode *slow = head;
        ListNode *fast = head;
        while (fast->next != nullptr && fast->next->next != nullptr)
        {
            slow = slow->next;
            fast = fast->next->next;
        }
        // 逆置后部分链表
        ListNode *newList = slow->next;
        ListNode *curNode = slow->next->next;
        newList->next = nullptr;
        while (curNode != nullptr)
        {
            ListNode *temp = curNode->next;
            curNode->next = newList;
            newList = curNode;
            curNode = temp;
        }
        // 依次比较
        while (newList != nullptr)
        {
            if (newList->val != head->val)
                return false;
            newList = newList->next;
            head = head->next;
        }
        return true;
    }
  • 相关阅读:
    严格模式
    es6模块与 commonJS规范的区别
    Javascript内置对象、原生对象、宿主对象关系
    实现继承的几种方式
    创建对象的一些方式
    null的小扩展
    getElementById的缩略
    你真的知道为什么不推荐使用@import?
    换行与不换行
    transition与animation
  • 原文地址:https://www.cnblogs.com/sdlwlxf/p/5096861.html
Copyright © 2011-2022 走看看