本人刚自学python不久,对此语言的理解不够透彻,如果有哪里有错误各位大佬可以指正。
class Node(object):
def __init__(self,item):
self.data=item
self.next=None
class Singlelinklist(object):
#构造函数
def __init__(self,n):
self.head=Node(0)
self.length=n
#获取链表长度
def _get_length_(self):
return self.length
#判断链表是否为空
def is_empty(self):
return self.length==0
#头插法
def head_insert(self,node):
if self.head.next==None:
self.head.next=node
else:
node.next=self.head.next
self.head.next=node
self.length+=1
#尾插法
def append(self,node):
if self.head==None:
self.head.next=node
else:
temp=self.head
while temp.next!=None:
temp=temp.next
node.next=temp.next
temp.next=node
self.length+=1
#指定位置插入
def insert(self,node,i):
while int(i)<=0 or int(i)>self.length+2:
print("您选择的位置是不合法的,请重新输入: ")
i=input("重新输入您选择的位置: ")
temp=self.head
j=0
while j!=int(i)-1:
temp=temp.next
j+=1
node.next=temp.next
temp.next=node
self.length+=1
#删除指定节点(按位删除),删除第i个位置的节点,并返回该节点的值
def delete_index(self,i):
temp=self.head
j=0
if int(i)>self.length:
return -1
else:
while j!=int(i)-1:
temp=temp.next
j+=1
t=(temp.next).data
temp.next=temp.next.next
self.length-=1
return t
#按值删除(已知全部或者部分值)
def delete_element(self,element):
temp=self.head
while temp!=None and (temp.next).data!=element:
temp=temp.next
if temp==None:
print("链表中没有该值")
return -1
else:
temp.next=temp.next.next
self.length-=1
return 0
#遍历:
def travel_print(self):
temp=self.head.next
i=1
while temp!=None:
print("第",i,"个数据是:",temp.data," type:",type(temp.data))
temp=temp.next
i+=1
print("链表长度为",self._get_length_())
print(type(self))
#按位索引
def search(self,i):
while int(i)<=0 or int(i)>self.length:
print("i是不合法的")
i=input("请重新输入i的值: ")
temp=self.head
for j in range(0,int(i),1):
temp=temp.next
print("第",i,"个数据是: ",temp.data)
#销毁链表
def destroy(self):
self.length=0
self.head=None
def main():
#创建一个空单链表
linklist=Singlelinklist(0)
print("链表长度为:",linklist._get_length_())
print(linklist.is_empty()) #判断链表是否为空,如果是返回true,否则返回false
n=input("请输入你要初始化的链表长度(尾插法): ")
for i in range(int(n)):
element=input("请输入对应结点的数据为:")
outnode=Node(element)
linklist.append(node=outnode)
print(linklist.is_empty())
linklist.travel_print()
k=input("请输入你要初始化的链表长度(头插法): ")
for i in range(int(k)):
element=input("请输入对应结点的数据为:")
outnode=Node(element)
linklist.head_insert(outnode)
print(linklist.is_empty())
linklist.travel_print()
print("下面进行插入操作: ")
N=input("输入你要插入的数据的个数: ")
for i in range(int(N)):
element=input("请输入对应结点的数据为:")
outnode=Node(element)
place=input("输入该结点你想插入的指定位置: ")
linklist.insert(outnode,place)
linklist.travel_print()
print("接下来进行按位删除: ")
del_pla=input("输入你要删除的位置: ")
linklist.delete_index(int(del_pla))
linklist.travel_print()
print("接下来进行按值删除: ")
data=input("输入你要删除的数据: ")
linklist.delete_element(data)
linklist.travel_print()
print("按位索引: ")
for i in range(linklist.length-4,linklist.length+1,1):
linklist.search(i)
print("销毁链表")
linklist.destroy()
main()
```**