c++ 中的循环判断bug

今天写leetcode234题回文链表的时候遇到了一个问题
题目如下

//给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 
//
// 
//
// 示例 1: 
//
// 
//输入:head = [1,2,2,1]
//输出:true
// 
//
// 示例 2: 
//
// 
//输入:head = [1,2]
//输出:false
// 
//
// 
//
// 提示: 
//
// 
// 链表中节点数目在范围[1, 10⁵] 内 
// 0 <= Node.val <= 9 
// 
//
// 
//
// 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 
// Related Topics 栈 递归 链表 双指针 
//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
#include "bits/stdc++.h"

using namespace std;

 */***这是第一版代码***
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        stack order;
        ListNode *p = head;
        while (!p){
            order.push(p);
            p = p->next;
        }
        p = head;
        while (!p){
            ListNode* node = order.top();
            if(p->val != node->val) return false;
            p = p->next;
            order.pop();
        }
        return true;
    }
};

 */***这是第二版代码***
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        stack<ListNode*> order;
        ListNode *p = head;
        while (p != nullptr){
            order.push(p);
            p = p->next;
        }
        p = head;
        while (p != nullptr){
            ListNode* node = order.top();
            if(p->val != node->val) return false;
            p = p->next;
            order.pop();
        }
        return true;
    }
};
//leetcode submit region end(Prohibit modification and deletion)

我在while循环判断的时,偷懒就写了个!p(平时我也是这么写的,一点毛病没有),今天居然一直报错,说我测试用例[1,2]判断有误,我老老实实改回来了之后,代码就不报错,成功通过。于是想着记录一下这个bug 希望有本领的大哥能过目一下,看看是哪里有问题,求求了!!!

你可能感兴趣的:(链表,leetcode,c++)