当前位置: 首页 > 知识库问答 >
问题:

为什么这个“B”链表发生了变化?

梁学真
2023-03-14

我写了一个函数

    private void merge(ListNode a, ListNode b){
        ListNode cur = new ListNode(0);
        
        while(a != null && b != null){
            cur.next = a;
            cur = cur.next;
     
            cur.next = b;
            cur = cur.next;
            
            b=b.next;
            a=a.next;
        }
        if(a==null && b==null) return;
        else if(a==null){
            cur.next = b;
        }else if(b==null){
            cur.next = a;
        }
        return;
    }

我想的是用一个“cur”来记录这两个链表“a”和“b”中的每个节点。然后这两个链表'a'和'b'移动到它的下一个节点。然后转到下一个WHILE循环。

然而,这是错误的。当我调试时,在这个第一个WHILE循环中,当它完成这个

cur.next = b;
a: [1,5,4]
b: [5,4]
cur: [1,5,4]
    while(a != null && b != null){
            cur.next = a;
            a=a.next;
            cur = cur.next;
            cur.next = b;
            b=b.next;
            cur = cur.next;
        }
    while(a != null && b != null){
            cur.next = a;
            a=a.next;
            cur = cur.next;

            cur.next = b;
            b=b.next;
            cur = cur.next;
        }
while(a != null && b != null){
            cur.next = a;
            cur = cur.next;
     
            cur.next = b;
            cur = cur.next;
            
            b=b.next;
            a=a.next;
        }

共有1个答案

南门峰
2023-03-14

cur指向一个仍然需要next的节点时,您仍然无法将其分配给next的问题。

方法末尾的提示返回;是不需要的。

首先使用递归,做一些简单的工作,然后调用相同方法的其他实例来完成其馀的工作,这可能会有所帮助。

private ListNode merge(ListNode a, ListNode b) {
    if (a == null) {
        return b;
    } else if (b == null) {
        return a;
    }
    ListNode anext = a.next;
    a.next = merge(b, a.next);
    return a;
}
private ListNode merge(ListNode a, ListNode b) {
    while (true) {
        if (a == null) {
            return b;
        } else if (b == null) {
            return a;
        }
        ListNode anext = a.next;
        a.next = b;

        a = b;
        b = anext;
    }
}

难点在于,调用的参数被切换,而不是执行两个步骤A.next和B.next。

您的版本将结果放在A中,并要求两个列表具有相同的长度。A为空而B不为空是不可能的。

在您的第一个版本中,首先引入了0元素

 类似资料:
  • 我刚刚浏览了一些关于如何在另一个像素阵列之上绘制像素阵列的代码,如下所示: } 如您所见,一个人能够在另一个位图之上的特定坐标上绘制一个位图对象。 我不明白的是两个for循环。我知道,外部for循环是绘制位图的y轴,并启动内部for循环来绘制位图的x轴。 现在我过来了: sp和dp到底代表什么?'c'在后面是什么意思 ? 提前感谢,致以最诚挚的问候

  • 嘿,我不能正确理解这个JavaScript代码: 输出 所以我知道前四个输出的代码内部发生了什么,但无法理解最后四个输出的代码内部发生了什么,请有人详细解释最后四个输出的代码,这将对我真正有帮助。

  • 问题 下面的代码显示,当影响一个数组到另一个数组时,这两个数组变得相互依赖。 我想知道为什么这与类型不同,因为如果我们有以下内容: 两个变量和引用的是同一个字符串,所以更改一个会影响另一个。

  • 问题内容: 早期的javadoc 这样表示有一个接口,它似乎有一个同样的关系作为必须的。 现在看来,我们固守在,这肯定是不一样的。 发生了什么事? 问题答案: 它已被删除前一段时间。布赖恩·格茨(Brian Goetz)提出了撤职的理由: 当前,唯一的实现者是Collection,所有其他支持流的方法都使用一种比“ stream”更合适的方法名称来提供特殊的流(chars(),codePoints

  • 有问题的部分在类App extends react.component下。我正在尝试用update方法中的状态更改重新呈现Leader组件。它会更改状态,但不会更改传递给Leader到Rerender的属性。

  • 它将把牌阵的一半分配给玩家和计算机(玩家得到前半部分,计算机得到后半部分)。现在这是先洗牌,所以是的,这似乎是公平的。 我得到的出界错误是这一行: