Оригинальный связанный список измененPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Оригинальный связанный список изменен

Сообщение Anonymous »

Оригинальный связанный список в основных изменениях, когда я пытаюсь отменить вторую половину списка ссылок, но я не понимаю, как именно. Если кто -то сможет дать мне объяснение подробно, я очень ценю это. Я оставил несколько комментариев в коде, объясняющем, где я не уверен, что происходит. < /P>

Код: Выделить всё

class Node:
def __init__(self, value, next=None):
self.value = value
self.next = next

def is_palindromic_linked_list(head):
if head is None or head.next is None:
return True

# find middle of the LinkedList
slow, fast = head, head
while (fast is not None and fast.next is not None):
slow = slow.next
fast = fast.next.next

'''
Here I reverse the second half of the link list.

The variable slow points to the second half of the link list and
the reversed linked list is now head_second_half.

If I print out each node, in link list head, every node prints out from the
original link list on this line before the reversal.
'''

head_second_half = reverse(slow)  # reverse the second half
# store the head of reversed part to revert back later

'''
Here although I am passing slow into the reverse function to reverse the second
half of the link list my link list head gets modified and I can see this because
by printing out all nodes from link list head on this line after the reversal I
seem to only get the first half of the link list
'''

copy_head_second_half = head_second_half

# compare the first and the second half
while (head is not None and head_second_half is not None):
if head.value != head_second_half.value:
break  # not a palindrome

head = head.next
head_second_half = head_second_half.next

reverse(copy_head_second_half)  # revert the reverse of the second half

if head is None or head_second_half is None:  # if both halves match
return True

return False

def reverse(head):
prev = None
while (head is not None):
next = head.next
head.next = prev
prev = head
head = next
return prev

def main():
head = Node(2)
head.next = Node(4)
head.next.next = Node(6)
head.next.next.next = Node(4)
head.next.next.next.next = Node(2)

print("Is palindrome: " + str(is_palindromic_linked_list(head)))

head.next.next.next.next.next = Node(2)
print("Is palindrome: " + str(is_palindromic_linked_list(head)))

main()
< /code>
У меня есть несколько комментариев выше, объясняющая проблему, которая у меня есть с моим пониманием того, что происходит. Моя первоначальная мысль заключалась в том, чтобы просто иметь переменную, которая имеет обратную вторую половину списка ссылок и остальную часть кода, не возвращаясь к исходному порядку списка ссылок. Это не работает, потому что, когда я называю is_palindromic_linked_list (head) 
во второй раз в основном списке ссылок был изменен и не имеет атрибута .next
Насколько я понимаю, переменная медленная - это указатель, который указывает на адрес памяти начала второй половины списка ссылок, поэтому, когда я обращаю во вторую половину связанного списка мой оригинальный список связанного списка Get Модифицировано? Если это так, то то, что происходит в деталях, потому что у меня возникают проблемы с пониманием того, как возвращение отмены каким -то образом держит оригинальный связанный список нетронутым в основном. Под этим я имею в виду, что в моей основной функции , если я должен был распечатать каждый узел из головки списка ссылок, не возвращаясь обратно изменение в is_palindromic_linked_list Функция Список ссылок изменяется, и, следовательно, в какой -то момент Не содержать .next , поэтому во второй раз, когда я называю эту функцию, возникает ошибка, но возвращая обратно связанный список, который он работает. Не вижу, что здесь происходит, потому что я вижу это, когда я отделял вторую половину связанного списка, поэтому все, что я делаю с этим списком ссылок Посмотрите, как мой оригинальный список ссылок теперь содержит только первую половину и снова возвращается в этот отдельный список ссылок (который, я считаю >
Я не уверен, что имею смысл. Я изо всех сил пытаюсь объяснить свой мыслительный процесс и действительно хотел бы разъяснения.


Подробнее здесь: https://stackoverflow.com/questions/684 ... st-changed
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Оригинальный связанный список изменен
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как отвечать на электронные письма, сохраняя оригинальный контент, используя smtplib и imaplib
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как получить оригинальный вектор из Lucene
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Получите оригинальный тип Python от Type Hint
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Почему Array.Reverse (а) Иногда меняет оригинальный массив, но иногда нет?
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»