#-*- coding:utf-8 -*-#Author: Bing Xu
classNode(object):def __init__(self,data):
self.data=data
self.next=NoneclassSingle_Linklist(object):def __init__(self):'''链表初始化'''self.head_node=Nonedefis_empty(self):'''判断链表是否为空
:return:'''
return self.head_node ==Nonedefget_len(self):'''获取链表对象的长度
:return: 链表长度'''counter=0
cur=self.head_nodewhilecur:
counter+= 1cur=cur.nextreturncounterdefclear_list(self):'''清除链表所有元素
:return: 空链表'''self.head_node=Nonedefappend(self,data):'''链表尾部追加节点
:param data: 追加节点的内容
:return:'''node=Node(data)ifself.is_empty():
self.head_node=nodeelse:
cur=self.head_nodewhilecur.next:
cur=cur.next
cur.next=nodedefinsert(self,i,data):'''插入新的节点
:param i: 待插入的位置,0 <= i <= self.length
:param data: 待插入的节点数据
:return:'''node=Node(data)
length=self.get_len()
cur=self.head_nodeif length >=i:if i ==0:
self.head_node=node
node.next=curelse:for item in range(i-1):
cur=cur.next
temp=cur.next
cur.next=node
node.next=tempelse:returnFalsedefremove(self,data):'''删除链表内容为data的所有节点
:param data: 要删除的内容
:return:'''cur=self.head_nodeif cur.data ==data:
self.head_node=cur.nextreturn
else:whilecur.next:#temp = cur
#cur = cur.next
temp,cur =cur,cur.nextif cur.data ==data:
temp.next=cur.nextdefpop(self,i):'''删除链表对象第i个节点并返回该节点内容
:param i: 要删除的节点,0 <= i < self.length
:return: 删除节点的内容'''length=self.get_len()
cur=self.head_nodeif i ==0:
Data=cur.data
self.head_node=cur.nextreturnDataelif i
temp, cur=cur, cur.next
Data=cur.data
temp.next=cur.nextreturnDatadefreset_data(self,i,data):'''修改第i个节点的内容
:param i: 要修改的节点,0 <= i < self.length
:param data: 修改后的内容
:return:'''cur=self.head_nodeif 0 <= i
cur=cur.next
cur.data=dataelse:returnFalsedefget_data(self,i):'''获取链表第i个的值
:param i: 0 <= i < self.length
:return: 节点的内容'''cur=self.head_nodeif 0 <= i
cur=cur.nextreturncur.dataelse:return False