我是否正确编写了链表程序的复制构造函数?

Did I write the copy constructor for my Linked List program correctly?

提问人: 提问时间:10/16/2021 更新时间:10/17/2021 访问量:101

问:

我正在为我的数据结构类做一个项目,它要求我编写一个类来实现一个整数的链表。

  • 对 Node 使用内部类。
  • 包括以下方法。
  • 编写一个测试程序,使您能够以任何顺序使用所需的任何数据测试所有方法。

我必须创建三个不同的构造函数。其中一个构造函数是复制构造函数。我的代码在下面显示了我做了什么,但我不确定我是否正确编写了这个构造函数。我还有一个名为 addToFront 的方法,这是我需要在此项目中实现的众多方法之一。有人可以让我知道我需要为复制构造函数编写什么吗?我不知道我需要为复制构造函数写什么。我试过查找它,但显示的示例与我想写的内容不匹配。

public class LinkedListOfInts {
    Node head;

    private class Node {
        int value;
        Node nextNode;

        public Node(int value, Node nextNode) {
            this.value = value;
            this.nextNode = nextNode;
        }

    }
    
    public LinkedListOfInts() {
        
    }
    
    public LinkedListOfInts(LinkedListOfInts other) {
        
    }

    public void addToFront(int x) {
        head = new Node(x, head);
    }

    public String toString() {
        String result = " ";
        for (Node ptr = head; ptr != null; ptr = ptr.nextNode)
            result += ptr.value + " ";
        return result;
    }

    public static void main(String[] args) {
        LinkedListOfInts list = new LinkedListOfInts();
        for (int i = 0; i < 15; i++)
            list.addToFront(i);
        System.out.println(list);
    }

}
Java 方法 链接列表 复制构造函数

评论

0赞 Ryan 10/16/2021
为什么编写了 LinkedListOfIntsTest 参数的构造函数是这样的方式,不应该传入头节点和所有其他节点的列表?
0赞 Ryan 10/16/2021
geeksforgeeks.org/......也许这对你的课堂和你自己的理解会有所帮助
0赞 10/16/2021
我的教授就是这样在课堂上设置的。他希望类复制它,我们研究了一些方法,但现在他希望我们添加它并实现一堆方法以及一些构造函数。
0赞 Ryan 10/16/2021
那么节点是什么?如果是这种情况,则似乎不需要内部类节点。LinkedListOfIntsTest
0赞 Elliott Frisch 10/16/2021
stackoverflow.com/a/69592057/2970947

答:

0赞 Unmitigated 10/17/2021 #1

您可以遍历其他列表的节点,并根据它们的值按顺序创建新的尾节点。

public LinkedListOfInts(LinkedListOfInts other) {
    Node tail = null;
    for(Node n = other.head; n != null; n = n.nextNode){
        if(tail == null) this.head = tail = new Node(n.value, null);
        else {
            tail.nextNode = new Node(n.value, null);
            tail = tail.nextNode;
        }
    }
}
// ...
public static void main(String[] args) {
    LinkedListOfInts list = new LinkedListOfInts();
    for (int i = 0; i < 15; i++)
        list.addToFront(i);
    LinkedListOfInts copy = new LinkedListOfInts(list);
    System.out.println(list);
    System.out.println(copy);
}