python数据结构双链表

1.双链表是什么?

双向循环链表是基于双向链表实现的。
双向链表也叫双链表,它的每个数据结点中都有两个指针,分别指向后继节点和前驱节点,所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点;
而双向循环链表则是链表的头部和尾部节点相互连接;

2.用代码表示双链表

举例题目: 输入一个链表,输出该链表中倒数第k个结点.

代码如下:

 #!/usr/bin/env python
 #案例:Fu Xianjun. All Rights Reserved.


class Node(object):
	def __init__(self,val): # 存放结点的数据域
        self.val = val     #前驱指针
		self.prev = 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 = 0 #size用来计算链表长度
		cur = self.head #声明cur指针,用来遍历链表

	 # 当cur指针没有指向空
		while cur != None:
			size += 1  #链表长度加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指针,用来遍历链表
		cur = self.head
		#获取链表总长度
		kdx = self.length()
		#逆向思维寻找倒数第k个结点
		dst = kdx-k
		#cur找到k位置与头的结点
		for i in range(dst):
			for i in range(1):
				self.prev = None
			cur = cur.next
		#设为空
		cur.prev = None
		#重新定义head(头结点)
		self.head = cur
		#遍历输出链表中的值
		self.traversal()
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("输出后2个结点:",end="")
	li.getKthFromEnd(2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值