2.单向链表
定义
单向链表也叫做单链表,是链表中最简单的一种形式,他的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域指向一个空值(None)
说明
- 表元素域elem用来存放具体的数据
- 链接域next用来存放下一个节点的位置(Python中的标识)指向下一个结点
- 变量p指向链表的头节点(首结点)的位置,从p出发能找到表中的任意节点。
功能实现
Node结点
1
2
3
4class Node(object):
def __init__(self,item):
self.item = item
self.next = None链表初始化
1
2
3
4
5
6
7class SingleLinkList:
def __init__(self,node = None):
if node != None: # 不为空的话,创建结点作为头结点
headNode = Node(node)
self.__head = headNode
else:
self.__head = node #相当于等于None判断是否为空
1
2def is_empty(self):
return self.__head == None #根据头结点是否是空来判断链表长度
1
2
3
4
5
6
7
8
9def length(self):
# 获取链表长度
cur = self.__head
count = 0
#不断next直到直到最末尾None
while cur!=None:
count+=1
cur = cur.next
return count遍历链表
1
2
3
4
5
6def travel(self):
cur = self.__head
while cur != None:
print(cur.item,end=" ")
cur = cur.next
print("")头部添加元素
1
2
3
4
5
6
7def add(self,item):
#首先创造结点
node = Node(item)
# 结点指向头部
node.next = self.__head
#__head指向当前node结点
self.__head = node尾部添加元素
1
2
3
4
5
6
7
8
9
10
11
12def append(self,item):
# 首先创造结点
node = Node(item)
#判断链表是否为空,如果是空的话,那么就是头结点
if self.is_empty():
self.__head = node # 把当前结点当作头结点
else:
# 从头结点一直找到最后一个,将最后的一个next指向当前的node结点
curNode = self.__head
while curNode.next != None:
curNode = curNode.next
curNode.next = node指定位置添加元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19def insert(self,pos,item):
# 若指定位置pos为第一个元素之前,则执行头部插入
if pos <=0:
self.add(item)
# 若指定位置pos超过链表尾部,则执行尾部插入
elif pos > (self.length()-1):
self.append(item)
else:
# 首先创造结点
node = Node(item)
count = 0
pre = self.__head
while count < (pos-1):
count +=1
pre = pre.next
# 前一个结点指向的现在变成node指向
node.next =pre.next
# 前一个结点现在指向node结点
pre.next = node删除元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17def remove(self,item):
cur = self.__head
pre = None
while cur != None:
if cur.item == item:
#如果第一个就是删除的元素
if not pre : # pre没有发生变化,说明第一个就是删除的元素
self.__head = cur.next # 头结点直接指向第二个元素
else:
#将删除位置前一个结点的next指向删除位置的后一个结点
pre.next = cur.next
break
else:
# pre存的就是上一个结点
pre = cur
# cur存的就是下一个结点
cur = cur.next查找元素
1
2
3
4
5
6
7
8def search(self,item):
cur = self.__head
while cur != None:
if cur.item == item:
return True
else:
cur = cur.next
return False
测试用例
1 | if __name__ == '__main__': |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咋的个人博客!







