关注
您的代码中存在几个问题,主要涉及到C++和链表操作的混合使用,以及一些逻辑上的小错误。首先,您使用了malloc来分配内存,这是C语言中的做法,而在C++中通常推荐使用new操作符或者智能指针(如std::unique_ptr)。其次,您在反转链表节点时的逻辑处理有误,导致可能的链表断裂或无限循环。
下面是修改后的C++代码,去除了malloc的使用,并修正了反转链表部分的逻辑:
cpp
#include <iostream>
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if (head == nullptr || head->next == nullptr || m == n) return head;
ListNode* dummy = new ListNode(0); // 创建哑节点
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
// 将prev移动到第m-1个节点
for (int i = 1; i < m; ++i) {
prev = prev->next;
curr = curr->next;
}
ListNode* start = curr; // 第m个节点
ListNode* thenext = nullptr;
// 反转第m到第n个节点
for (int i = m; i <= n; ++i) {
thenext = curr->next;
curr->next = prev->next;
prev->next = curr;
curr = thenext;
}
// 将start的下一个节点连接到第n+1个节点
start->next = curr;
ListNode* newHead = dummy->next;
delete dummy; // 释放哑节点内存
return newHead;
}
};
// 用于测试的代码
int main() {
// 示例链表 1->2->3->4->5
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);
Solution sol;
ListNode* reversedHead = sol.reverseBetween(head, 2, 4);
// 打印反转后的链表
while (reversedHead != nullptr) {
std::cout << reversedHead->val << " ";
ListNode* temp = reversedHead;
reversedHead = reversedHead->next;
delete temp; // 释放链表节点内存
}
return 0;
}
注意:
我添加了一个哑节点(dummy node)来简化边界条件的处理。
使用new操作符创建节点,并在主函数中释放了所有动态分配的内存。
修正了反转链表的逻辑,确保在反转后正确地连接前后的链表部分。
添加了测试代码来验证函数的功能。
2
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
148967次浏览 2533人参与
# 秋招落幕,你是He or Be #
3407次浏览 76人参与
# 应届生进小公司有什么影响吗 #
109174次浏览 1116人参与
# 比亚迪工作体验 #
70299次浏览 254人参与
# 你面试体验感最差/最好的公司 #
3333次浏览 57人参与
# 工作中听到最受打击的一句话 #
2701次浏览 62人参与
# 大厂VS公务员你怎么选 #
71454次浏览 660人参与
# 重来一次,你会对开始求职的自己说 #
3144次浏览 72人参与
# 一人说一个提前实习的好处 #
3661次浏览 75人参与
# 团建是“福利”还是是 “渡劫” #
4171次浏览 112人参与
# 实习没事做是福还是祸? #
8609次浏览 137人参与
# 如何排解工作中的焦虑 #
244119次浏览 2241人参与
# 从顶到拉给所有面过的公司评分 #
144841次浏览 518人参与
# 今年你最想重开的一场面试是? #
1503次浏览 26人参与
# 你小心翼翼的闯过多大的祸? #
7153次浏览 109人参与
# 联影求职进展汇总 #
123877次浏览 781人参与
# OPPO求职进展汇总 #
755980次浏览 5390人参与
# 互联网公司爆料 #
158631次浏览 724人参与
# 产品实习,你更倾向大公司or小公司 #
189154次浏览 2053人参与
# 秋招结束之后的日子 #
113938次浏览 1039人参与