-
链表是链式的存储多个元素.
-
但不同于列表, 链表中的元素在内存中不必是连续的空间
-
链表的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(有些语言称为指针或者链接)组成
-
链表访问任何一个位置的元素时, 都需要从头开始访问.(无法跳过第一个元素访问任何一个元素)
-
111(个人理解)、通过一个类似于“日”的结构,一个存数据,一个存地址。使得数据在内存上可以不连续。
class LinkedList:
class Node:
def __init__(self, data):
self.item = data
self.next = None
def __init__(self):
self.head = None
self.length = 0
def index_of(self, item):
# 返回索引
current = self.head
count = 0
while current is not None:
if current.item == item:
return count
current = current.next
count += 1
return -1
def insert(self, item, index=-1):
new_node = self.Node(item)
if index == -1 or index >= self.length: # 在末尾插入
if self.length == 0:
self.head = new_node
else:
current = self.head
while current.next is not None:
current = current.next
current.next = new_node
else: # 在指定索引插入
if index < 0:
raise IndexError("索引超出范围")
if index == 0: # 在头部插入
new_node.next = self.head
self.head = new_node
else:
current = self.head
for _ in range(index - 1):
current = current.next
new_node.next = current.next
current.next = new_node
self.length += 1
def print_list(self):
current = self.head
while current is not None:
print(current.item)
current = current.next
def delete_node(self, item):
current = self.head
prev = None
index_item = self.index_of(item)
if index_item == -1:
return False
if index_item == 0:
self.head = current.next
for i in range(index_item):
prev = current
current = current.next
prev.next = current.next
self.length -= 1
return current.item
l1 = LinkedList()
l1.insert(1)
l1.insert(2)
l1.insert(3)
l1.insert(4)
l1.delete_node(3)
l1.print_list()