python数据结构与算法之链表
创建链表
头插法、尾插法
class Node:
def __init__(self, item):
self.item = item
self.next = None
# 头插法
def create_linklist_head(li):
head = Node(li[0])
for element in li[1:]: # li[0]作为头节点,故从li[1]开始
node = Node(element)
node.next = head # 新插入的元素下一个指向原来的头
head = node # 链表的头移向新插入的元素
return head
# 尾插法
def create_linklist_tail(li):
head = Node(li[0])
tail = head
for element in li[1:]:
node = Node(element) # 创建节点
tail.next = node # 上一个节点的尾指向下一个
tail = node # 指针移到下一个节点
return head
def print_linklist(lk):
while lk:
print(lk.item, end=',')
lk = lk.next
lk1 = create_linklist_head([1, 2, 3])
print(print_linklist(lk1))
lk2 = create_linklist_tail([4, 5, 6])
print(print_linklist(lk2))
链表节点的插入(插入p)
注意:一定是先将4与2相连再将1与4相连 ,否则1先与4相连会使2之后的链表在内存消失
链表节点的删除(删除p)
p = curNode.next
curNode.next = curNode.next.next(即p.next)
del p (可忽略,因为上一步已经将p分离出了链表)
双链表
双链表节点的插入(插入p)
双链表节点的删除(删除p)
注意先将p与后面的链表连起来