使用TreeSet合并两个已排序的LinkedList

时间:2015-10-01 19:19:46

标签: java linked-list treeset

我正在尝试使用TreeSet合并两个已排序的LinkedList,因为它们已经自己对它进行排序(虽然这是一个例外,但是LinkedList都没有公共元素)。这里的问题是,一个神秘的' 0'附加在LinkedList我试图返回,我无法确定。

Node gimmeNode(Node root, TreeSet<Integer> st){
Node temp = root;
Node toPrint = root;
Iterator it = st.iterator();
while(it.hasNext()){
    temp.data = (int) it.next();
    temp.next = new Node();
    temp = temp.next;
}
return root;
}

Node MergeLists(Node headA, Node headB) {
Node root = new Node();
TreeSet<Integer> st = new TreeSet<>();
if(headA==null)
    return headB;
else if(headB==null)
    return headA;
else{

    while(headA != null){
        st.add(headA.data);
        System.out.println("AddedA : " + headA.data);
        headA = headA.next;

    }


    while(headB != null){
        st.add(headB.data);
        System.out.println("AddedB : " + headB.data);
        headB = headB.next;
    }
    root = gimmeNode(root, st);
    return root;
}



}

Output

AddedA : 1
AddedA : 3
AddedA : 5
AddedA : 6
AddedB : 2
AddedB : 4
AddedB : 7
LinkedList : 1 2 3 4 5 6 7 0

1 个答案:

答案 0 :(得分:0)

gimmeNode最后有一个new Node()。情况应该不是这样 - 它应该指向null。因此,new Node(),因为它是默认构造的,它有一个0.这是你无关的0.你应该实现一个机制来检查你是否在TreeSet的最后一个元素 - 一个简单的计数器会做。如果您在最后一个元素,请不要设置temp.next = new Node();,请保留null