2015-10-01 5 views
0

Я пытаюсь объединить два отсортированных LinkedList с помощью TreeSet, так как они уже сортируют его самостоятельно (хотя исключение, которое имеет и связанныйList, не имеет общих элементов). Проблема здесь в том, что в LinkedList добавлен таинственный «0», который я пытаюсь вернуть, которого я не могу установить.Слияние двух отсортированных LinkedList с использованием TreeSet

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 

ответ

0

gimmeNode имеет new Node() в его конце. Это не должно быть так - оно должно указывать на нуль. Поэтому new Node(), так как он построен по умолчанию, имеет значение 0. Это ваше постороннее 0. Вам следует реализовать механизм проверки, находится ли вы в последнем элементе TreeSet - тривиальный счетчик будет делать. Если вы находитесь в последнем элементе, не устанавливайте temp.next = new Node();, оставьте его null.

+0

wont it.hasNext() работают только в том случае, если TreeSet имеет в нем элемент? Например, while (node.next! = Null), поэтому он не должен выделять память, если она в конце (поскольку цикл while вообще не выполняется)? –

+0

Да, но в течение последней итерации цикла while - для последнего элемента в наборе - вы устанавливаете 'temp.next = new Node();'. Этот 'новый Node()' является вашим лицом. –

+0

О да спасибо сейчас знаю^_ ^ –

Смежные вопросы