@whoareyoutofuckinglecture
Python developer

Как развернуть односвязный список в Python 3?

Дан односвязный список:
d = {
  'value': 1,
  'next': {
    'value': 2,
    'next': {
      'value': 3,
      'next': {
        'value': 4,
        'next': None,
      },
    },
  },
}

Нужно написать функцию, которая бы выводила элементы данного списка поочерёдно с конца.
Как это можно сделать?
  • Вопрос задан
  • 1881 просмотр
Решения вопроса 1
0xD34F
@0xD34F
Рекурсия есть:

def printSinglyLinkedList(node):
  if node != None:
    printSinglyLinkedList(node['next'])
    print(node['value'])


printSinglyLinkedList(d)

Рекурсии нет:

def reverseSinglyLinkedList(head):
  prevNode = None
  currNode = head

  while currNode != None:
    nextNode = currNode['next']
    currNode['next'] = prevNode
    prevNode = currNode
    currNode = nextNode

  return prevNode
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@powerind
С рекурсией но без печати
def recu(d):
    l = []
    if d.get('next') is not None:
        l.append(d.get('value', None))
        l.extend(recu(d['next']))
    else:
        l.append(d.get('value', None))
    return l

Или вот без рекурсии:
def non_recu(d):
    l = []
    while True:
        l.append(d.get('value', None))
        d = d.get('next', None)
        if d is None:
            break
    return l

Воспользоваться можно так:
recu(d)
[1, 2, 3, 4]
non_recu(d)
[1, 2, 3, 4]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы