关注
在您的代码中,有几个错误和潜在的问题点需要修正。主要是关于链表反转部分和链表拼接的逻辑。以下是修改后的代码,包括对错误点的修正和注释的添加:
java
import java.util.*;
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
// 反转链表中的m到n部分
public ListNode reverseBetween(ListNode head, int m, int n) {
if (head == null || head.next == null || m >= n) {
return head;
}
ListNode dummyNode = new ListNode(-1);
dummyNode.next = head;
ListNode pre = dummyNode;
// pre结点走到m的前一个结点
for (int i = 0; i < m - 1; i++) {
pre = pre.next;
}
ListNode leftNode = pre.next; // m位置的节点
ListNode rigthNode = leftNode;
// rigthNode走到n的下一个结点
for (int i = 0; i < n - m + 1; i++) {
rigthNode = rigthNode.next;
}
// 反转m到n之间的链表
reverseLinkedList(leftNode, rigthNode);
// 拼接链表
pre.next = rigthNode.prev; // 因为在reverseLinkedList中我们使用了prev来记录前一个节点
leftNode.next = rigthNode.next;
return dummyNode.next;
}
// 反转链表中的一部分
private void reverseLinkedList(ListNode start, ListNode end) {
ListNode prev = null;
ListNode current = start;
while (current != end) {
ListNode next = current.next;
current.next = prev;
prev = current;
current = next;
}
// 如果需要,可以在这里给start(现在的尾节点)添加一个prev指针,指向反转前的上一个节点
// 但在这个问题中,我们只需要保证反转后正确连接即可
}
}
注意:
原始代码中rigthNode拼写错误,已更正为rigthNode(虽然更标准的可能是rightNode)。
我修改了reverseLinkedList方法,使其接受两个参数:start(开始反转的节点)和end(反转结束后的下一个节点)。这样可以更清晰地控制反转的范围,并且避免了对链表进行不必要的断开和重新连接。
您的原始代码试图将pre.next和rigthNode.next设为null,这在反转链表后是不必要的,并且会导致链表在m到n之间的部分与原始链表断开。
在reverseLinkedList方法中,我没有添加prev指针到ListNode类中,因为这会改变原始链表的结构。如果确实需要,可以在ListNode类中添加prev字段,但在这个问题中,我们不需要这样做。
我添加了对m >= n的检查,因为当m大于等于n时,没有需要反转的节点。
如果head或head.next为null,则直接返回head,因为没有节点需要反转。
1
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# HR面都在聊什么? #
19210次浏览 215人参与
# AI时代还有必要刷leetcode吗? #
44168次浏览 535人参与
# 从投递到OC,你用了多久 #
33196次浏览 335人参与
# 毕业租房也有小确幸 #
173300次浏览 4555人参与
# 哪些公司面试还在问八股? #
18306次浏览 164人参与
# 想从事Agent应该学习哪些技术? #
12365次浏览 364人参与
# 大学生该如何认清当下的就业环境? #
165086次浏览 905人参与
# 字节7000实习来了,你投了吗? #
41432次浏览 309人参与
# 26届春招投递记录 #
4534次浏览 49人参与
# 米哈游笔试 #
670064次浏览 1203人参与
# 有哪些公司在面试时考察AICoding? #
25268次浏览 414人参与
# 实习必须要去大厂吗? #
202053次浏览 1784人参与
# 春招什么时候投? #
52255次浏览 709人参与
# 初创公司值得加入吗? #
44557次浏览 226人参与
# 你都在哪些场所面过试? #
80723次浏览 506人参与
# 你现在一天AI几次? #
21712次浏览 147人参与
# 校招求职有谈薪空间吗 #
223771次浏览 2385人参与
# 博世求职进展汇总 #
18893次浏览 64人参与
# 毕业论文进行时 #
36131次浏览 171人参与
# 我的求职进度条 #
1176845次浏览 8615人参与
查看11道真题和解析