一、单向链表
1、基本概念
单项链表模型:
链表是一个个节点连接而成,节点由两部分构成:元素域、链接域;链接域链接下一个节点,从而构成一条链条,而python主要实现单个节点对象,从而构成链条。
2、链表的创建
python实现一个节点对象:
# __author__: PPPsych
# date: 2021/1/7
class Node:
def __init__(self, item):
self.item = item # 该节点值
self.next = None # 连接一下一个节点
定义一个链表对象:
class SinglyLinkedList:
"""链表对象"""
def __init__(self):
self._head = None
链表的创建分为头插法与尾插法:
1、头插法:
# __author__: PPPsych
# date: 2021/1/7
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:]:
node = Node(element)
node.next = head
head = node
return head
def print_linklist(lk):
while lk:
print(lk.item, end=' ')
lk = lk.next
lk = create_linklist_head([1, 2, 3])
print_linklist(lk)
————————————————————————————————————————————————————————————
输出:
3 2 1
2、尾插法:
# __author__: PPPsych
# date: 2021/1/7
class Node:
def __init__(self, item):
self.item = item
self.next = None
# 尾插法创建链表
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
lk = create_linklist_tail([1, 2, 3])
print_linklist(lk)
————————————————————————————————————————————————————————————————
输出:
1 2 3
3、链表的插入与删除
链表的插入:
p.next = curNode.next
curNode.next = p
链表的删除:
p = curNode.next
curNode.next = curNode.next.next
def p
# __author__: PPPsych
# date: 2021/1/7
class Node:
def __init__(self, item):
self.item = item # 该节点值
self.next = None # 连接一下一个节点
class SinglyLinkedList:
"""链表对象"""
def __init__(self):
self._head = None
def insert(self, index, item):
"""
在指定位置插入节点(设置索引从0开始)
:param item:
:return:
"""
if index == 0: # 当索为0则头部插入
self.add(item)
elif index >= self.length: # 当索引超范围则尾部插入
self.append(item)
else: # 找到插入位置的上一个节点,修改上一个节点的next属性
cur = self._head
n = 1
while cur.next:
if n == index:
break
cur = cur