有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将这两个链表分别交错?

我正试图交错两个列表,以便:

列表1以{a1,a2,a3,a4,a5}开头 清单2以{b1,b2,b3,b4,b5}开头

我希望他们是 {a1、b2、a3、b4、a5} {b1、a2、b3、a4、b5}

这是我的代码:

public void interleave(A3LinkedList other) {
  A3Node thisCurrent = this.head;
  A3Node otherCurrent = other.head;
    int count = 1;
    while(count <= this.length){
        System.out.println("List1 current at loop "+ count + ": " + thisCurrent); // just to debug
        System.out.println("List2 current at loop "+ count + ": " + otherCurrent);

        A3Node tempThis = thisCurrent;
        A3Node tempOther = otherCurrent;

        //if(count%2 == 0){ //if count is even, aka every second object in list
            thisCurrent = tempOther; // makes thisCurrent same as otherCurrent
            otherCurrent = tempThis; // makes otherCurrent same as temp saved
        //}


        thisCurrent = thisCurrent.next;
        otherCurrent = otherCurrent.next;
        count ++;
    }
}

while循环中println方法的输出告诉我节点交换正确,但另一个测试程序的最终结果告诉我列表根本没有改变

while循环内部的输出:

List1 current at loop 1: A
List2 current at loop 1: L
List1 current at loop 2: M
List2 current at loop 2: B
List1 current at loop 3: C
List2 current at loop 3: N
List1 current at loop 4: O
List2 current at loop 4: D
List1 current at loop 5: E
List2 current at loop 5: P
List1 current at loop 6: Q
List2 current at loop 6: F
List1 current at loop 7: G
List2 current at loop 7: R

测试仪的输出: {ABCDEFG} {LMNOPQR} 测试失败:testInterleave在203行 测试失败:testInterleave在第204行

正如你所看到的,测试仪的输出不是它应该的样子,它没有通过测试。 为什么


共 (1) 个答案

  1. # 1 楼答案

    您的代码无法工作,因为您正在方法中创建本地对象引用,并且只重新分配这些本地引用。您需要重新分配引用的成员(即A3Node.next)及其指向的内容。比如:

    public void interleave(A3LinkedList other) {
            A3Node thisCurrent = this.head;
            A3Node otherCurrent = other.head;
            
            int count = 1;
            while(count <= this.length){
                // don't want to lose reference to other's next
                A3Node otherNext = otherCurrent.next;
                
                // now we change the references that next are pointing to
                
                // make otherCurrent.next point to thisCurrent.next
                otherCurrent.next = thisCurrent.next;
                // make thisCurrent.next point to otherNext.next (old otherCurrent.next)
                thisCurrent.next = otherNext;
                
                thisCurrent = thisCurrent.next;
                otherCurrent = otherCurrent.next;
                count += 1;
            }
        }