单向链表
单向链表是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201018091831148.png#pic_center
节点实现
class Node(object):
def __init__(self,elem):
self.elem = elem
self.next = None
链表的节点是用一个类实现的
单链表的基本操作
- is_empty() 判断链表是否为空
- length() 链表长度
- travel() 遍历整个链表
- add(item) 链表头部添加元素
- append(item) 链表尾部添加元素
- insert(pos,item) 指定位置添加元素
- remove(item) 删除节点
- search(item) 查找结点是否存在
单链表的实现
class SingleLinkList(object):
def __init__(self,node=None):
self._head = node
def is_empty(self):
return self._head == None
def length(self):
cur = self._head
count = 0
while cur != None:
count += 1
cur = cur.next
return count
def travel(self):
cur = self._head
while cur != None:
print(cur.elem,end=' ')
cur = cur.next
print('\n')
def add(self,item):
#链表头部添加元素
node = Node(item)
if self._head == None:
self._head = node
else:
p = self._head
node.next = p
self._head = node
def append(self,item):
#链表尾部添加元素
node = Node(item)
if self.is_empty():
self._head = node
else:
cur = self._head
while cur.next != None:
cur = cur.next
cur.next = node
def insert(self,pos,item):
#在指定位置插入元素
node = Node(item)
if pos == 0:
self.add(item)
else:
cur = self._head
count = 0
while(count < (pos-1)):
cur = cur.next
count+=1
p = cur.next
cur.next = node
node.next = p
def remove(self,item):
cur = self._head
pre = None
while cur != None:
if cur.elem == item:
if cur == self._head:
self._head = cur.next
else:
pre.next = cur.next
break
else:
pre = cur
cur = cur.next
def search(self,item):
cur = self._head
while cur != None:
if cur.elem == item:
return True
else:
cur = cur.next
return False
if __name__ == "__main__":
# l1 = SingleLinkList()
# print(l1.is_empty())
# l1.add(1)
# l1.travel()
node = Node(100)
l2 = SingleLinkList(node)
l2.append(2)
l2.add(1)
l2.insert(0,3)
l2.insert(1,3)
l2.travel()
l2.remove(3)
# l2.remove(3)
l2.travel()