class Node(object):
def __init__(self,val):
# 存放结点的数据域
self.val = val
# 前驱指针
self.prior = None
# 后继指针
self.next = None
class DoubleLinkedList(object):
def __init__(self):
self.head = None
self.tail = None
# 判断双链表是否为空
def empty(self):
return self.head is None
# 计算链表的长度
def length(self):
# size用来计算链表长度
size = 0
# 声明cur指针,用来遍历链表
cur = self.head
# 当cur指针没有指向空
while cur != None:
# 链表长度加1
size += 1
# cur指针指向当前节点的后继节点
print(str(size)+" "+str(cur.val))
cur = cur.next
return size
# 遍历输出链表中的值
def traversal(self):
cur = self.head
while cur != None:
print(cur.val,end=" ")
cur = cur.next
print()
# 尾插法
def append(self,val):
newNode = Node(val)
if self.empty():
self.head = newNode
self.tail = newNode
else:
self.tail.next = newNode
newNode.prev = self.tail
self.tail = newNode
# 输出从倒数第k个结点到最后的所有结点
def getKthFromEnd(self,k):
cur = self.tail
for i in range(k - 1):
cur = cur.prev
while cur != None:
print(cur.val, end=" ")
cur = cur.next
print()
if __name__ == "__main__":
li = DoubleLinkedList()
li.append('a')
li.append('b')
li.append('c')
li.append('d')
li.append('e')
print("原链表:",end="")
li.traversal()
print("输出后3个结点:",end="")
li.getKthFromEnd(3)
print()
print("输出后2个结点:",end="")
li.getKthFromEnd(2)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210418191255195.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81Njc2NjkwMA==,size_16,color_FFFFFF,t_70)
运行结果
数据结构的双链表
最新推荐文章于 2024-04-20 21:28:50 发布