Я написал функцию, которая объединяет два несортированных односвязных списка. Я просто добавляю каждый узел из второго списка в начало исходного списка. Кажется, работает, за исключением того, что, когда я печатаю оригинальный, теперь объединенный список, новые добавленные элементы имеют значение 'null'
public SLL mergeUnsorted(SLL otherList)
{
Iterator itr = otherList.iterator() ;
while (itr.hasNext())
{
Object elem = itr.next() ;
System.out.println(elem) ; // to make sure the elements are retrieved correctly
SLLNode ins = new SLLNode(elem, null) ; // make a node out of the element
ins.succ = this.first ; // insert the element to the front of the original list
this.first = ins ;
}
return this ;
}
из основного я вызываю функцию:
myList = myList.mergeUnsorted(otherList) ;
printIt(myList) ;
Выход:
null null null null Hi Hello Salut Ciao
SLLNode-конструктор:
public SLLNode(Object ObjElem, SLLNode succ)
{
this.ObjElem = ObjElem ;
this.succ = succ ;
}
[EDIT]
class SLL
{
SLLNode first ;
public SLL()
{
first = null ;
}
...
Примечание 1: В упражнении говорится, что представление данных класса SLL включает только первый узел private SLLNode first ;
, следовательно, я не могу использовать какую-либо ссылку на «последний» узел
Примечание 2: в упражнении есть метод, который мне, скорее всего, понадобится, но я не понимаю, как.
private SLLNode node(int i)
{
SLLNode curr = first ;
for(int j=0; j<i; j++){
curr = curr.succ ;
}
return curr ;
}
Примечание 3: я мог бы добавить здесь код реализации итератора, но, учитывая, что я могу напечатать список, используя тот же итератор, он кажется правильным, поэтому я бы не стал слишком загромождать этот пост. Надеюсь, это нормально?
[EDIT2]
public static void main(String[] args)
{
SLL myList = new SLL() ;
SLL otherList = new SLL() ;
SLLNode a = new SLLNode("xx", null) ;
SLLNode b = new SLLNode("yy", null) ;
SLLNode c = new SLLNode("ww", null) ;
SLLNode d = new SLLNode("aa", null) ;
SLLNode e = new SLLNode("rr", null) ;
otherList.addFirst(a) ;
printIt(otherList) ;
otherList.addFirst(b) ;
printIt(otherList) ;
otherList.addFirst(c) ;
printIt(otherList) ;
otherList.addFirst(d) ;
printIt(otherList) ;
SLLNode A = new SLLNode("Hello", null) ;
SLLNode B = new SLLNode("Hi", null) ;
SLLNode C = new SLLNode("Salut", null) ;
SLLNode D = new SLLNode("Ciao", null) ;
SLLNode E = new SLLNode("Moin", null) ;
myList.addFirst(A) ;
printIt(myList) ;
myList.addFirst(B) ;
printIt(myList) ;
myList.addFirst(C) ;
printIt(myList) ;
myList.addFirst(D) ;
printIt(myList) ;
myList = myList.mergeUnsorted(otherList) ;
printIt(myList) ;
}
[EDIT3] @ Пауло, полный вывод в соответствии с генерацией включен в Edit2
xx
yy xx
ww yy xx
aa ww yy xx
Hello
Hi Hello
Salut Hi Hello
Ciao Salut Hi Hello
aa
ww
yy
xx
null null null null Ciao Salut Hi Hello
обратите внимание, что строки 9-12 взяты из оператора печати внутри функции слияния