这个链表有点像Python里的列表,就是实现数据的各种处理,看这个程序的时候可以先把list的方法全部忘掉。
class Node(): #定义一个字节类
def __init__(self,elem):
self.elem=elem #变量
self.next=None #指向下一个变量
class Single_link(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 add_head(self,item): #在链表头部添加元素
node=Node(item)
node.next=self.__head
self.__head=node
def travel(self): #遍历链表
cur=self.__head
while(cur!=None):
print(cur.elem,end=" ")
cur=cur.next
print("\n")
def m_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 my_insert(self,pos,item): #在任意位置添加元素,pos:位置
if(pos<=0):
self.add_head(item)
elif(pos>(self.length()-1)):
self.m_append(item)
else:
per=self.__head
count=0
while(count<(pos-1)):
count+=1
per=per.next
node=Node(item)
node.next=per.next
per.next=node
def my_remove(self,item): #删除一个元素,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): #查找元素是否在链表中,item是所要查询的元素的值
cur = self.__head
while(cur != None):
if(cur.elem == item):
return True
else:
cur = cur.next
return False
#最后写个函数运行一下看看是否正确
if __name__=="__main__":
Li= Single_link()
print(Li.is_empty()) #为空链表输出True
print(Li.length())
Li.m_append(1) #此时链表为:1
print(Li.is_empty())
print(Li.length())
Li.m_append(2) #1,2
Li.m_append(3) #1,2,3
Li.add_head(4) #4,1,2,3
print(Li.is_empty())
print(Li.length())
Li.my_insert(-1,5) #5,4,1,2,3
Li.travel()
Li.my_insert(2,6) #5,4,6,1,2,3
Li.travel()
Li.my_insert(10,7) #5,4,6,1,2,3,7
Li.travel()
print(Li.search(4)) #True
Li.my_remove(5) #4,6,1,2,3,7
Li.travel()
最近在看数据结构,以前没好好学的,最后还得补回来…