Я создал функцию односвязного списка, и мой профессор сказал, что для дополнительной оценки мы можем превратить ее в двусвязный список. Я прочитал несколько вещей, таких как добавление функции prev_node, такой как эта.
class ListNode(object):
def __init__(self, item = None, prev = None, link = None):
'''creates a ListNode with the specified data value and link
post: creates a ListNode with the specified data value and link'''
self.item = item
self.prev = prev
self.link = link
Тем не менее, я смущен тем, куда идти оттуда. Я знаю, что мне нужно добавить хвост, а также голову, как я сделал здесь.
from DoublyListNode import ListNode
class LinkedList(object):
#--------------------------------------------------------------
def __init__(self, seq=()):
""" Pre: Creates a Linked List
Post: Creates a list containing the items in the seq=()"""
if seq == ():
# If there is no items to be put into the list, then it creates an empty one.
self.head = None
self.tail = None
else:
# Creates a node for the first item.
self.head = ListNode(seq[0], None)
# If there are remaining items, then they're added while keeping track of the last node.
last = self.head
for item in seq[1:]:
last.link = ListNode(item, None)
last = last.link
self.size = len(seq)
Может ли кто-нибудь сказать мне (НЕ ДЕЛАТЬ ЭТО ДЛЯ МЕНЯ), что я должен сделать, чтобы изменить свой связанный список на дважды связанный список? Я знаю, что теперь мне нужно сослаться на хвост, а также на голову, но я совершенно не понимаю, как это сделать.
tail
, заменитеtail
новым узлом. Каждый раз, когда вы вставляете в позицию 0, заменитеhead
новым узлом. Каждый раз, когда вы удаляетеtail
, заменитеtail
наprev
хвостового узла. Каждый раз, когда вы удаляетеhead
, заменитеhead
наnext
головного узла. - person aruisdante   schedule 05.03.2015tail
; это делает добавление к списку намного быстрее (хотя поддерживать актуальностьtail
в односвязном списке сложнее, поскольку вы не можете найти новыйtail
из старого, вам нужно перебирать весь список). - person aruisdante   schedule 05.03.2015