Это потому, что вы даете track.next
исходную ссылку на узел, которому уже присвоено значение next
. Следуйте логике на этом примере:
Скажем, у вас есть ListNode размера 3, использующий узел 1 в качестве корня:
( 1 ) --> ( 2 ) --> ( 3 ) --> null
В вашей реализации вы берете каждый узел и добавляете его в стек следующим образом:
Узел -> next
| 3 null | <--- Top of stack
| 2 3 |
| 1 2 |
Затем вы создаете новый узел newHead
и начинаете выталкивать узлы из стека, присваивая значения вашему узлу следующим образом:
( 3 ) --> ( 2 ) --> ( 1 ) --> ( 2 )
Поскольку вы не обновили значение track.next
для исходного заголовка списка, он по-прежнему указывает на узел 2. Но узел 2 теперь указывает на узел 1, поэтому вы попали в бесконечный цикл. Позвонив по номеру track.next = null
, вы измените вышеприведенное, чтобы оно выглядело так:
( 3 ) --> ( 2 ) --> ( 1 ) --> null