当前位置 博文首页 > Ember_Sky:LeetCode234. 回文链表

    Ember_Sky:LeetCode234. 回文链表

    作者:[db:作者] 时间:2021-08-14 21:08

    //234. 回文链表
    /*
    可以使用栈等方法,但是题目说最好不要使用额外的空间
    1、容易理解的方法:
      先使用双指针找到中间节点:第一个while
      然后将前半部分链表翻转:第二个while
      最后使用双指针同时遍历两部分链表:第三个while
    2、可能更快一点,但是比较复杂的方法:
      在找中间节点的同时,将前半部分链表翻转
      最后同时遍历
    */
    class Solution {
    public:
      bool isPalindrome(ListNode* head) {
        ListNode* p = head;
        ListNode* q = head;
        int num = 0;
        while (q != NULL) {
          q = q->next; num++;
          if (q == NULL) break;
          p = p->next;
          q = q->next; num++;
        }
        if (num < 2) return true;
        ListNode* l = NULL;
        ListNode* r = p;
        p = head;
        while (p != r) {
          q = p;
          p = p->next;
          q->next = l;
          l = q;
        }
        if (num & 1) r = r->next;
        while (l != NULL) {
          if (l->val != r->val) return false;
          l = l->next;
          r = r->next;
        }
        return true;
      }
    };
    
    
    cs
    下一篇:没有了