You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

链表重排代码单节点时循环异常:条件判断为何不符合预期?

重排链表单节点输入时的循环条件异常问题

我在解决重排链表问题时,代码通过了大部分测试用例,但当链表节点数为1时会出现运行错误。取消注释代码中的边界处理逻辑后就能正常运行,但我认为没必要单独处理这个边界情况。

我的代码如下:

class Solution {
public:
    void reorderList(ListNode* head) {
        // if(!head || !head->next) return;
        ListNode *p = head;
        vector<ListNode*> nodes;
        while(p){
            nodes.push_back(p);
            p = p->next;
        }
        delete p;
        for(int front=0; front<(nodes.size()-2); front++){
            int back = nodes.size() - 1;
            nodes[back]->next = nodes[front]->next;
            nodes[front]->next = nodes[back];
            nodes.pop_back();
            back = nodes.size() - 1;
            nodes[back]->next = NULL;
        }
    }
};

题目要求说明:给定单链表头节点,将链表从L0 → L1 → … → Ln-1 → Ln重排为L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …的形式,不可修改节点值,仅允许调整节点本身。约束条件为链表节点数范围是[1, 5*10^4],节点值范围为1<=Node.val<=1000。

我调试后发现一个奇怪的现象:当输入节点数为1时,循环条件front < (nodes.size()-2)的结果居然是true。按数学逻辑0 < (1-2)即0 < -1明显不成立,想请教各位这一现象的原因。

内容的提问来源于stack exchange,提问作者Ansh Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:35:16