问题出在循环条件上。当前的循环条件是tmp->next != nullptr,这会导致最后一个节点被跳过,并没有将其加入到新链表中。
可以将循环条件修改为tmp != nullptr,同时在循环内判断tmp是否为头节点,如果是,则直接将其作为新链表的头节点。
以下是修正后的代码:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode *newList = nullptr;
ListNode *node;
ListNode *tmp = head;
while(tmp != nullptr){
node = new ListNode(tmp->val);
if (tmp == head) {
newList = node; // 如果是头节点,直接设置为新链表的头节点
} else {
node->next = newList; // 否则更新新节点的指针
newList = node;
}
tmp = tmp->next;
}
return newList;
}
};
修正后的代码会正确地反转给定链表,并返回反转后的头节点。
内容由零声教学AI助手提供,问题来源于学员提问




