Связанный список - объясните вывод этого кода. Ответ: [1 2 3 4 3 2 1] - PullRequest
0 голосов
/ 03 августа 2020

Каков результат выполнения следующей функции, если в качестве входных данных передается головной узел следующего связанного списка? 1-> 2-> 3-> 4-> 5

def fun(head):
    if(head==None):
        return
    if head.get_next().get_next()!= None:
        print(head.get_data()," ", end='')
        fun(head.get_next())
    print(head.get_data()," ",end='')

Предположим, head.get_next () -> переход к следующей главе. & head.get_data () -> получить данные текущего Head.

1 Ответ

1 голос
/ 06 августа 2020

Вы всегда можете попробовать записать каждый шаг, чтобы понять результат. Это должно быть

enter image description here

Unless I made a mistake somewhere.

Explanation:

Each step here represents a new стек вызовов кадр.

На шагах 1, 2, 3 условие в строке 4 истинно, поэтому код печатает значение на строка 5 и выполняет рекурсивный вызов. Пока что на консоль выведено 1..2..3 ...

На шаге 4, однако условие ложно. Поскольку 4 - это голова, следующий элемент равен 5, а 5 не имеет следующего элемента. Теперь помните, как я сказал ранее, каждый шаг здесь - это новый кадр стека. Итак, на шаге 4 мы находимся в стековом фрейме 4. Если предложение ложно, мы go до строки 7. Заголовок равен 4, поэтому мы выводим 4 в консоль и выходим из текущего кадра.

Теперь мы вернулись в кадр 3 в строке 6. Мы переходим к строке 7, заголовок равен 3, поэтому мы печатаем 3 и выходим из текущего кадра. И так до тех пор, пока не выйдем из кадра 1.

Вот откуда эти 4..3..2..1 .. пришли. Они были напечатаны в строке 7.

Стопка на каждом шаге: введите описание изображения здесь

...