使用treeSet中的元素初始化链接列表

时间:2015-10-14 05:49:54

标签: java linked-list set

问题是: 定义一个构造函数,该构造函数将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());
        }
    }

2 个答案:

答案 0 :(得分:1)

您必须解决的主要问题是您需要将每个项目添加到列表末尾而不是开头。

将节点添加到列表的开头很简单:

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

添加到最后更难,因为你没有引用尾部。但解决方案非常简单:在您正在开发的构造函数中,保留对列表尾部的引用,以便您可以在链接的末尾添加每个值而不是开头。

答案 1 :(得分:1)

问题包括“增加词典顺序。”

我的解决方案是没有辅助方法:

    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;
            }

        }
    }