错误纠正,数据结构中应该是结点,之前都写成了节点
双向链表
根据单项链表和循环链表,这里就不重复画图了,就附一幅图,一段代码
class DoubleNode(object):
def __init__(self, item):
self.item = item
self.next = None
self.pre = None
class DoubleLinkList(object):
def __init__(self, node = None):
self._head = node
def is_empty(self):
return self._head == None
def length(self):
if self.is_empty():
return 0
cur = self._head
count = 1
while cur.next != None:
count += 1
cur = cur.next
return count
def travel(self):
if self.is_empty():
return None
cur = self._head
while cur.next != None:
print(cur.item, end=' ')
cur = cur.next
print(cur.item)
def append(self, item):
node = DoubleNode(item)
if self.is_empty():
self._head = node
node.pre = self._head
node.next = None
else:
cur = self._head
while cur.next != None:
cur = cur.next
cur.next = node
node.pre = cur
def add(self, item):
node = DoubleNode(item)
if self.is_empty():
self._head = node
else:
cur = self._head
node.next = self._head
cur.pre = node
self._head = node
def insert(self, pos, item):
node = DoubleNode(item)
if pos <= 1:
self.add(item)
elif pos > (self.length() - 1):
self.append(item)
else:
cur = self._head
count = 0
while count < (pos - 1):
count += 1
cur = cur.next
node.next = cur.next
cur.pre = node
cur.next = node
node.pre = cur
def search(self, item):
cur = self._head
if self.is_empty():
return None
while cur.next != None:
if cur.item == item:
return True
else:
cur = cur.next
if cur.item == item:
return True
else:
return False
def remove(self, item):
cur = self._head
pre = None
if self.is_empty():
return None
if cur.item == item:
if cur.next != None:
self._head = cur.next
else:
self._head = None
else:
while cur.next != None:
if cur.item == item:
pre.next = cur.next
cur.next.pre = pre
return
else:
pre = cur
cur = cur.next
if cur.item == item:
pre.next = None
t = DoubleLinkList()
print(t.is_empty())
print(t.length())
t.append(5)
t.append(2)
t.append(0)
t.add(6)
t.insert(5, 1)
t.insert(-1, 9)
t.insert(2, 233)
t.travel()
t.remove(233)
t.remove(9)
t.remove(1)
t.remove(6)
t.travel()
# print(t.is_empty())
# print(t.length())
# print(t.search(555))
结果:
True
0
9 6 233 5 2 0 1
5 2 0