leetcode重大bug被我发现了,单独执行测试用例通过但是批量跑测试用例是相同的测试用例执行不通过
一、题目描述
======
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
二、思路分析
======
preNode
。然后将当前节点指针后移在重复next指针指向preNode
。就可以解决问题preNode
就可以完成节点2的反转。不过这里节点已的next指针还是指向节点2的。这一步我们会在最后处理首尾问题。三、AC 代码
=======
bug
//外边界左侧节点
private static ListNode firstNode ;
//外边界右侧节点
private static ListNode lastNode ;
public ListNode reverseBetween(ListNode head, int left, int right) {
//preNode 作为接受反转节点
ListNode preNode=null;
//用于指向当前操作节点 , 也是内部右侧节点
ListNode currentNode = head;
//存储下一节点,方便赋值
ListNode nextNode=null;
//内部左侧节点
ListNode leftNode=head;
int index =1 ;
while (currentNode != null) {
nextNode = currentNode.next;
if (index == left-1) {
//捕获外部边界节点
firstNode = currentNode;
}
if (index >= left && index <= right) {
//指针修复
currentNode.next = preNode;
preNode = currentNode;
}
currentNode = nextNode;
if (index == right) {
//捕获外部边界节点
lastNode = nextNode;
break;
}
index++;
}
//因为是指定范围但是有可能是全部链表这时候外部边界都是null
if (firstNode != null) {
leftNode = firstNode.next;
firstNode.next = preNode;
}
if (lastNode != null) {
leftNode.next = lastNode;
return head;
} else {
return preNode;
}
}
添加头结点
firstNode.next = rightNode;
leftNode.next = lastNode;
private static ListNode firstNode ;
private static ListNode lastNode ;
public ListNode reverseBetween2(ListNode head, int left, int right) {
ListNode visualNode = new ListNode(-1, head);
firstNode = visualNode;
for (int i = 1;i < left; i++) {
firstNode = firstNode.next;
}
ListNode rightNode = firstNode;
for (int i = 0; i < right - left + 1; i++) {
rightNode = rightNode.next;
}
ListNode leftNode = firstNode.next;
lastNode = rightNode.next;
rightNode.next = null;
ListNode wpre = null;
ListNode wcur = leftNode;
while (wcur != null) {
ListNode next = wcur.next;
wcur.next = wpre;
wpre = wcur;
wcur = next;
}
firstNode.next = rightNode;
leftNode.next = lastNode;
return visualNode.next;
}
四、总结
====
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。