用树集中的元素初始化链表



问题是:定义一个构造函数,将TreeSet作为参数,并使用集合中的元素初始化一个链表。新表必须按字典递增的顺序排列。

这个方法将使用下面的类来实现:

public class LinkedList<T extends Comparable<T>> {
    private class Node{
        private T data;
        private Node next;
        private Node(T data){
            this.data = data;
            next = null;
        }
    }
    private Node head;
    public LinkedList(){
        head = null;
    }

现在我知道TreeSet本质上是排序的,所以我真正要做的就是从TreeSet中取出元素并把它放在这个链表的前面。但是我很难从集合中检索元素并将其添加到LinkedList中。我写了一个私人助手添加(T数据)方法,我正在使用它,但我不知道这是我应该如何接近它。我是数据结构的新手,所以对集合和它们的实现知之甚少。

public class LinkedList<T extends Comparable<T>> {
    private class Node{
        private T data;
        private Node next;
        private Node(T data){
            this.data = data;
            next = null;
        }
    }
    private Node head;
    public LinkedList(){
        head = null;
    }
    public void add(T data){
        Node n = new Node(data);
        if(head == null){
            head = n;
        }
        else{
            n.next = head;
            head = n;
        }
    }
    public LinkedList(TreeSet<T> test){
        Iterator<T> itr = test.iterator();
        while(itr.hasNext()){
            this.add(itr.next());
        }
    }

你需要解决的主要问题是,你需要将每个项目添加到列表的末尾,而不是开始。

将节点添加到列表的开头很容易:

public void addToHead(T data) {
    Node node = new Node(data);
    node.next = head;
    head = node;
}

添加到结尾比较困难,因为你没有对尾部的引用。但解决方案相当简单:在您正在开发的构造函数中,保持对列表尾部的引用,以便您可以在链接的末尾而不是开始添加每个值。

问题包括"增加字典顺序"。

我的解决方案是不使用辅助方法:

    public LinkedList(TreeSet<T> test){
        Node currNode = null;
        for(T data : test) {
            Node newNode = new Node(data);
            if(head == null) {
               head = newNode;
               currNode = head;
            }
            else {
               currNode.next = newNode;
               currNode = currNode.next;
            }
        }
    }

相关内容

  • 没有找到相关文章

最新更新