在检查问题之前,需要注意一些错误和改进:
在主函数中创建链表的方式不正确。应该使用
ListNode* head = new ListNode(1);来创建链表,并逐个链接节点。调用
s.removeNthFromEnd(head, target);删除倒数第n个节点后,需要更新头指针head指向新的链表头。打印链表时应该遍历链表,而不是直接输出头指针的值。
根据以上修正,下面是修改后的代码:
#include <iostream>
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) {}
};
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummy = new ListNode(0, head);
ListNode* pre = dummy;
for (int i = 0; i < n; i++) {
pre = pre->next;
}
while (pre->next) {
pre = pre->next;
head = head->next;
}
head = head->next;
ListNode* ans = dummy->next;
delete dummy;
return ans;
}
};
int main(){
Solution s;
// 创建链表
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next= new ListNode(4);
head->next->next->next->next = new ListNode(5);
int target = 1;
head = s.removeNthFromEnd(head, target);
// 打印链表
ListNode* curr = head;
while (curr) {
std::cout << curr->val << " ";
curr = curr->next;
}
std::cout << std::endl;
// 释放内存
while (head) {
ListNode* temp = head;
head = head->next;
delete temp;
}
return 0;
}
经过上述修正后,代码应该可以正确运行,并输出删除倒数第n个节点后的链表。
内容由零声教学AI助手提供,问题来源于学员提问




