码迷,mamicode.com
首页 > 其他好文 > 详细

234.Palindrome Linked List

时间:2020-05-12 16:57:00      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:node   color   rom   指针   false   linked   put   奇数   top   

给定一个单链表,求其是否可回读,即,正着读和倒着读一样。
Input: 1->2->2->1
Output: true

思路:
一、遍历链表,将其节点的值存入动态数组中,最后对数组头尾的值遍历判别。

bool isPalindrome(ListNode* head) {
    vector<int> tmp;
    while (head) {
        tmp.push_back(head->val);
        head = head->next;
    }
    int i = tmp.size();
    for (int j = 0; j < i/2; j++) {
        if (tmp[j] != tmp[i - j - 1]) return false;
    }
    return true;
}

 二、利用快慢指针,fast指针每次走2步,slow指针每次走一步,当fast走到结尾的时候,slow刚好走到链表的中点。利用栈,将slow走的节点的值存起来,当slow走到链表中点后,每走一步就将节点的值和栈的值比较。注意判断链表节点个数为奇数或偶数时,处理稍有差别

bool isPalindrome(ListNode* head) {
    ListNode* fast = head;
    ListNode* slow = head;
    stack<int> s;
    while (fast && fast->next) {
        s.push(slow->val);
        fast = fast->next->next;
        slow = slow->next;
    }
    if (fast) slow = slow->next; //如果链表节点个数为奇数
    while (slow) {
        if (slow->val != s.top()) return false;
        s.pop();
        slow = slow->next;
    }
    return true;
}

 

234.Palindrome Linked List

标签:node   color   rom   指针   false   linked   put   奇数   top   

原文地址:https://www.cnblogs.com/luo-c/p/12876839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!