如何解决为抽象创建 void 方法后的不同输出
我正在从 LeetCode 做这个问题:https://leetcode.com/problems/reverse-nodes-in-k-group/
我的原答案如下,效果很好,通过了所有测试。
class Solution {
public ListNode reverseKGroup(ListNode head,int k) {
if (head == null) return null;
int length = 0;
ListNode tmp = head;
// use tmp to traverse the linkedlist to count the number of nodes
while (tmp != null) {
tmp = tmp.next;
length++;
}
// times indicates the number of time we need to traverse
int times = length / k;
ListNode dummy = new ListNode(0,head);
ListNode before = dummy,cur = head;
for (int i = 0; i < times; i++) {
// h represents the head of the current group before traversed
ListNode h = cur;
ListNode prev = null;
for (int j = 0; j < k; j++) {
// traverse list in the group of k nodes
ListNode tmp1 = cur.next;
cur.next = prev;
prev = cur;
cur = tmp1;
}
// connect last traversed group's tail to current traversed group's head
before.next = prev;
before = h;
}
before.next = cur;
return dummy.next;
}
}
但是,当我尝试创建一个 void 方法作为 reverse(ListNode cur,ListNode before,int k)
然后将 for 循环中的整个部分复制并粘贴到 void 方法中,如下所示,我无法获得预期的输出没有了。
for (int i = 0; i < times; i++) {
reverse(cur,before,k);
}
before.next = cur;
return dummy.next;
}
private void reverse(ListNode cur,int k) {
ListNode h = cur;
ListNode prev = null;
for (int j = 0; j < k; j++) {
ListNode tmp1 = cur.next;
cur.next = prev;
prev = cur;
cur = tmp1;
}
before.next = prev;
before = h;
}
当我运行测试用例时,编译器产生了 java.lang.NullPointerException
:[1,2,3,4,5],k = 2
我还试图通过使用调试器在 IntelliJ 中跟踪整个过程来解决这个问题。我的直觉是它失败是因为 Java 中的按值传递属性,但我不确定也找不到说服自己的明确理由。任何答案将不胜感激!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。