双向链表
-
既可以从头遍历到尾, 又可以从尾遍历到头
-
一个节点既有向前连接的引用, 也有一个向后连接的引用.
111(个人理解)、通过使用一个类似于“目”的结构,一个存上一个的地址,一个存数据,一个存下一个的地址。使得内存上不连续的空间连接起来。
class Double_Link_list:
def __init__(self):
self.head = None
self.tail = None
self.length = 0
class Note:
def __init__(self, itme):
self.itme = itme
self.next = None
self.prev = None
def insert(self, itme, index=-1):
it_me = self.Note(itme)
if index < 0 and index != -1 and index > self.length:
raise IndexError
if self.length == 0:
self.head = it_me
self.tail = it_me
self.length += 1
return True
if index == -1:
it_me.prev = self.tail
self.tail.next = it_me
self.tail = self.tail.next
self.length += 1
return True
if index < self.length:
current = self.head
while current != it_me:
current = current.next
it_me.next = current
current.prev.next = it_me
it_me.prev = current.prev
current.prev = it_me
self.length += 1
return True
def print(self):
if self.length == 0:
return False
else:
current = self.head
for i in range(self.length):
print(current.itme)
current = current.next
return True
def delete(self, del_itme):
if self.length == 0:
return False
current = self.head
while del_itme != current.itme:
current = current.next
current.prev.next = current.next
current.next.prev = current.prev
self.length -= 1
return True
def indexof(self, itme):
if self.length == 0:
return 0
current = self.head
count = 0
while itme != current.itme:
current = current.next
count += 1
return count
d1 = Double_Link_list()
d1.insert(1)
d1.insert(2)
d1.insert(3)
d1.delete(2)
d1.insert(4)
d1.print()
print("---", d1.indexof(4))