第三日笔记
双向链表
双向链表实现代码
from practise import SingleLinkList
class Node(object):
"""节点"""
def __init__(self,item):
self.elem = item
self.next = None
self.prev = None
class DoubleLinkList(SingleLinkList):
"""双链表"""
def add(self,item):
"""链表头部添加元素,头插法"""
node = Node(item)
node.next = self._head
self._head = node
node.next.prev = node
def append(self,item):
"""链表尾部添加元素,尾插法"""
node = Node(item)
if self.is_empty():
self._head = node
else:
cur = self._head
while cur.next is not None:
cur = cur.next
cur.next = node
node.prev = cur
def insert(self,pos,item):
"""指定位置添加元素
:param item: 指定增加的具体元素
:param pos 从0开始
"""
if pos <= 0:
self.add(item)
elif pos > self.length()-1:
self.append(item)
else:
cur = self._head
count = 0
while count < pos:
cur = cur.next
count += 1
#循环退出后 pre指向pos-1
node = Node(item)
node.next = cur
node.prev = cur.prev
cur.prev.next = node
cur.prev = node
def remove(self,item):
"""删除节点"""
cur = self._head
while cur != None:
if cur.elem == item:
#判断此节点是否是头节点
if cur == self._head:
self._head = cur.next
if cur.next:
cur.next.prev = None
else:
cur.prev.next = cur.next
if cur.next:
cur.next.prev = cur.prev
break
else:
cur = cur.next
由代码可知,双向列表中许多方法可以继承父类方法,需要改动的方法只有添加以及删除的操作。
代码检测
检测代码与上节相同,如输出相同,则代表代码没问题
if __name__ == "__main__":
li = SingleLinkList()
# 检测是否为空
print(li.is_empty())
# 查看链表长度
print(li.length())
# 向链表尾部增加元素
li.append(1)
# 向链表头部增加元素
li.add(3)
li.append(2)
li.append(4)
li.append(5)
# 遍历链表
li.travel()
# 向指定位置增加元素
li.insert(3, 9)
print(" ")
li.travel()
# 删除元素
li.remove(3)
print(" ")
li.travel()
代码结果如下:
True
0
3 1 2 4 5
3 1 2 9 4 5
1 2 9 4 5
与上节结果相同,可知代码正确,双向链表代码实现成功。