今天写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<ListNode*> 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 希望有本领的大哥能过目一下,看看是哪里有问题,求求了!!!