链表重排代码单节点时循环异常:条件判断为何不符合预期?
重排链表单节点输入时的循环条件异常问题
我在解决重排链表问题时,代码通过了大部分测试用例,但当链表节点数为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
相关产品推荐
相关产品推荐

