#java #linked-list
#java #связанный список
Вопрос:
Я пытаюсь чередовать два списка так, чтобы:
список 1 начинается как {a1,a2,a3,a4,a5} список 2 начинается как {b1,b2,b3,b4,b5}
И я хочу, чтобы они были {a1, b2,a3,b4,a5} {b1, a2, b3, a4, b5}
Это мой код:
public void interleave(A3LinkedList other) {
A3Node thisCurrent = this.head;
A3Node otherCurrent = other.head;
int count = 1;
while(count <= this.length){
System.out.println("List1 current at loop " count ": " thisCurrent); // just to debug
System.out.println("List2 current at loop " count ": " otherCurrent);
A3Node tempThis = thisCurrent;
A3Node tempOther = otherCurrent;
//if(count%2 == 0){ //if count is even, aka every second object in list
thisCurrent = tempOther; // makes thisCurrent same as otherCurrent
otherCurrent = tempThis; // makes otherCurrent same as temp saved
//}
thisCurrent = thisCurrent.next;
otherCurrent = otherCurrent.next;
count ;
}
}
Выходные данные методов println в цикле while показывают мне, что узлы меняются местами правильно, но конечный результат в другой программе тестирования показывает мне, что списки вообще не меняются.
Вывод изнутри цикла while:
List1 current at loop 1: A
List2 current at loop 1: L
List1 current at loop 2: M
List2 current at loop 2: B
List1 current at loop 3: C
List2 current at loop 3: N
List1 current at loop 4: O
List2 current at loop 4: D
List1 current at loop 5: E
List2 current at loop 5: P
List1 current at loop 6: Q
List2 current at loop 6: F
List1 current at loop 7: G
List2 current at loop 7: R
Вывод из тестера:
{ABCDEFG}
{LMNOPQR}
Неудачный тест: testInterleave в строке 203
Неудачный тест: testInterleave в строке 204
Как можно видеть, вывод тестера не такой, каким он должен быть, он не проходит тест. Почему?
Ответ №1:
Ваш код не работает, потому что вы создаете ссылки на локальные объекты в методе и переназначаете только эти локальные ссылки. Вам нужно переназначить элементы ссылок (т.Е. A3Node.next
) и на что они указывают. Например, следующее:
public void interleave(A3LinkedList other) {
A3Node thisCurrent = this.head;
A3Node otherCurrent = other.head;
int count = 1;
while(count <= this.length){
// don't want to lose reference to other's next
A3Node otherNext = otherCurrent.next;
// now we change the references that next are pointing to
// make otherCurrent.next point to thisCurrent.next
otherCurrent.next = thisCurrent.next;
// make thisCurrent.next point to otherNext.next (old otherCurrent.next)
thisCurrent.next = otherNext;
thisCurrent = thisCurrent.next;
otherCurrent = otherCurrent.next;
count = 1;
}
}