链表的创建
函数里面的值赋予None是表示初始化,我们可以传入有效参数即可覆盖None。
链表头尾指针的本质就是 认对象!!!
把对象认了,就是不同链表之间的连接。
class Node:
def __init__(self,item):
self.item=item
self.next=None #尾部指针初始化置空
链表的创建非常简单,只需要创建初始位置和下一节点的储存位置即可
链表的头插法
头插法,就是往链表的头部之中插入元素,只需要另新节点的next对应旧节点即可
def head_insert(list):
head=Node(li[0]) #先初始化头节点,也是类的初始化
for i in li[1:]:
node=Node(i) #创建一个新的头节点,便于两个头节点连接
node.next=head
head=node
return head #返回头节点
链表的尾插法
def tail_insert(li):
head=Node(li[0])
tail=head #刚开始头节点和尾节点相同位置
for i in li[1:]:
node=Node(i)
tail.next=node
tail=node #把新节点赋予尾节点,(尾节点后移)
return tail #返回尾节点
链表的删除:
链表的删除涉及到两个间隔的链表元素的连接在这里插入代码片
1——2——3,删掉2,可以认为是1——3,即1的尾节点连接3的头节点
首先,3的头部连接1的尾部:
假设链表已经创建完毕
first.next=second.next #(second.next就是3,把3赋予2的位置)
del second
链表的增加:
即为 1——3 变为1——2——3
增加的过程,需要把3接到2的尾节点,把2接到1的尾节点
那么我们可以这样子:
second.next=first.next #3接上2的后面
first.next=second #2接在1的后面
双向链表
双向链表包含头和尾,既需要设置头指针,也需要设置尾指针,也就是说,设定两个指向对象
比如:
A
↔
B
↔
C
A \leftrightarrow B \leftrightarrow C
A↔B↔C
创建双向链表如下:
class train:
def __init__(self,number):
self.val=None #初始化头部指针
self.next=None #初始化尾部指针
self.number=number #初始化头节点的元素
现在开始双向链表的连接
lian1=train(li[0])
lian2=train(li[1])
lian3=train(li[2])
lian1.next=lian2 #lian2接在lian3的尾部
lian2.val=lian1 #lian1接在lian2的头部
lian2.next=lian3
lian3.val=lian2
双向链表和单向链表的性质差不多,类比即可
双链表可以双向寻找数据