class Node:
def __init__(self, data):
self.data = data
self.next = None
# 头插法 无头节点
class OpeareLink:
def __init__(self):
self.current_node = None
def add(self, data):
node = Node(data)
node.next = self.current_node
# 指针始终指向当前节点
self.current_node = node
def print_node(self):
cur_node = self.current_node
while cur_node:
print(cur_node.data)
cur_node = cur_node.next
def is_empty(self):
return self.current_node is None
def get_length(self):
cnt = 0
cur = self.current_node
while cur:
cnt += 1
cur = cur.next
return cnt
def insert_node(self, data, index):
cur = self.current_node
if index <= 0 or cur is None:
self.add(data)
else:
cnt = 0
while cur.next:
if cnt == index:
break
cnt += 1
cur = cur.next
node = Node(data)
node.next = cur.next
cur.next = node
def delete_node(self, index):
if self.is_empty() or index <= 0:
return
if index == 1:
self.current_node = self.current_node.next
else:
cnt = 2
pre_node = self.current_node
cur = pre_node.next
while cur:
if index == cnt:
break
pre_node = cur
cur = pre_node.next
cnt += 1
# index大于链表的情况
if cur is None:
pre_node.next = None
return
pre_node.next = cur.next
# 尾插法 有头节点
class OperateLink1:
def __init__(self):
# 定义一个头节点,当前指针位置在头节点处
self.head = Node(0)
self.current_node = self.head
def add(self, data):
# 新建节点
node = Node(data)
# 当前节点指向新建节点
self.current_node.next = node
# 将指针移动到新建的节点上
self.current_node = node
def print_node(self):
cur_node = self.head.next
while cur_node:
print(cur_node.data)
cur_node = cur_node.next
if __name__ == "__main__":
data_list = [1, 6, 7, 9, 2]
# 头插法
test = OpeareLink()
for i in data_list:
test.add(i)
# current_node = test.current_node
# while current_node:
# print(current_node.data)
# current_node = current_node.next
# test.print_node()
# print(test.is_empty())
# test.insert_node(3, 4)
# test.print_node()
test.delete_node(6)
test.print_node()
# 尾插法
# test1 = OperateLink1()
# for i in data_list:
# test1.add(i)
# test1.print_node()