308 链表的实现1 #
- 链表结点的数据构造
- 链表的数据构造
- 链表添加结点的实现
链表结点的构造 #
每个结点除了数据外,还包含指向下个结点的指针
class Node: def __init__(self,data): self.data=data #用于存储数据 self.next=None #用于指向下一结点
链表的数据结构 #
一个队列具有头节点和尾节点
class LinkedList: def __init__(self): self.header = None self.length = 0
链表从头部尾部及任意位置添加结点 #
class LinkedList: def __init__(self): self.header = None self.length = 0 # 判断链表是否为空,数值使用==比较,对象使用is来判断是否为None即可。 def is_empty(self): if self.header is None: return True else: return False # 在链表头部添加结点 def add_node_from_head(self, node): if self.header is None: self.header = node else: node.next = self.header self.header = node self.length += 1 return self # 在链表尾部添加结点 def add_node_from_behind(self, node): current_node = self.header if self.is_empty(): self.add_node_from_head(node) else: # 一直遍历到尾部结点 while current_node.next is not None: current_node = current_node.next current_node.next = node self.length += 1 return self # 在任意位置添加结点 def add_node_index(self, node, index): if self.is_empty(): self.header = node self.length = 1 return self if index > self.length - 1 or index < 0: print("超出范围,插入失败!") return self else: current_node = self.header count = 0 while True: if current_node is not None: # 最少有2个结点 if count == index: print("...找到位置....") if count == 0: # 插入到头结点之前 node.next = current_node self.header = node else: # 1. 新节点的next指向当前结点 # 2. 上一个节点的next指向新结点 node.next = current_node last_node.next = node self.length += 1 return self else: count += 1 last_node = current_node current_node = current_node.next else: # 只有一个头结点 node.next = current_node self.header = node self.length += 1 return self # 遍历链表 def traversing_list(self): header_node = self.header result = ",data:" + str(header_node.data) while header_node.next is not None: result = result + "-->" + "data:" + str(header_node.next.data) temp = header_node header_node = header_node.next if temp == header_node: return print("链表为:", result, ",长度为:" + str(self.length)) if __name__ == '__main__': print("初始化一个链表!") header = Node(0) linked_list = LinkedList() linked_list.add_node_index(header, 0) linked_list.traversing_list() print("在头部添加结点!") node0 = Node(1) linked_list.add_node_from_head(node0) linked_list.traversing_list() print("在尾部添加结点!") node1 = Node(2) linked_list.add_node_from_behind(node1) linked_list.traversing_list()
小结 #
- 掌握链表结点的构造
- 掌握链表的构造,能实现在任意位置添加结点的功能
习题 #
- 详细描述一下结点添加的过程,并自己实现一遍
- 预热思考下如何删除任意节点