我目前正在研究Java中的链接结构。我正在与一个类一起制作节点。具体来说,该方法将连接两个节点并返回代表该联合的第三个节点。节点1 = {1,2,3}; Node2 = {4,5,6} concat(Node1,Node2)= {1,2,3,4,5,6})
代码在下面。作为练习的一部分,三个节点应该彼此独立。我的解决方案是使用copy()方法复制节点。我想知道是否有更简单的方法来做到这一点。
谢谢。

public class Node {

int data;
Node next;

Node(int data){
    this.data = data;
}

Node concat(Node list1, Node list2) {
    // The copy method basically creates a copy of the given Node.
    Node an = copy(list1); Node b = copy(list2);
    Node a = an;
    while(a != null) {
        if(a.next == null) {break;}
        a = a.next;
    }
    a.next = b;
    return an;
}

 Node copy(Node p) {
     Node nan = new Node(p.data);
     Node n = nan;
     p = p.next;


     while(p != null) {
         n.next = new Node(p.data);
         n = n.next;
         p = p.next;
     }
     return nan;
     }
     }

最佳答案

如果希望所有链中的所有节点都独立,则必须复制它们。

无论如何,这是您的代码的稍微简化的版本:

Node concat(Node list1, Node list2) {
    Node clone = copy(list1);
    Node iter = clone;
    while (iter.next != null) {
        iter = iter.next;
    }
    iter.next = copy(list2);
    return clone;
}

Node copy(Node other) {
    Node clone = new Node(other.data);
    Node iter = clone;
    while (other.next != null) {
        other = other.next;
        iter.next = new Node(other.data);
        iter = iter.next;
    }
    return clone;
}

10-06 10:25