python 单向链表_python 单向链表的实现

构建节点类

class Node(object):

def init(self,item):

self.elem=item

self.next=None

构建链表类

class Single_linkList(object):

def __init__(self,node=None): #构造函数,链表头部

self.__head=node

def __str__(self):

return ("您所察看的数据为单向链表,该链表的长度为:%d"%(self.length()))

def is_empty(self):

"""判断链表头部是否指向空"""

return self.__head==None

def length(self):

"""遍历链表,求长度"""

cur=self.__head ### 使用cur表示当前指针

count=0

while cur !=None:

count +=1

cur = cur.next

return count

def travle(self):

"""遍历打印元素"""

cur=self.__head

if self.is_empty():

return "There is nothing"

else:

while cur !=None:

print(cur.elem,end="->")

cur=cur.next

def append(self,item):

"""尾部添加元素"""

"""遍历节点"""

node=Node(item) #构造节点

cur=self.__head

if self.__head==None: #如果连链表为空,则将head 指向 append的元素

self.__head=node

else:

while cur.next != None:

cur = cur.next

cur.next=node

def insert(self,persition,item):

"""向指定位置添加元素"""

node=Node(item) #构造节点

cur=self.__head

count=0

if persition<=0: ### 传入的数值小于0时,认为是在头部插入元素

self.add(item)

elif persition>=self.length():

self.append(item) ### 数值大于链表长度时,在尾部追加元素

else:

while cur != None and count <= persition-2:

count +=1

cur = cur.next

node.next=cur.next

cur.next=node

def add(self,item):

"""向头部添加元素"""

node=Node(item) #构造节点

cur=self.__head

node.next=cur

self.__head=node

def get_item(self,persition):

"""获取指定位置的元素"""

cur=self.__head

count=1

if self.is_empty(): ### 空列表直接返回

return "There is nothing"

elif persition<0:

return self.__head.elem

elif persition>self.length()-1: # 遍历获取最后一个元素

cur=self.__head

while cur.next !=None:

cur=cur.next

return cur.elem

else:

while cur != None and count <=persition:

count +=1

cur = cur.next

return cur.elem

def pop(self):

"""删除尾部元素"""

cur=self.__head

if self.length()<=1: #如果只有一个元素或链表为空,则直接将链表的head指向空

self.__head=None

else:

while cur.next.next != None:

cur = cur.next

cur.next=None

def remove(self,item): ### 移除第一个元素容易出现问题,,主要是将链表的头部指向下一个元素即可

"""移除指定的第一个元素"""

cur=self.__head

per=self.__head

if self.index(item)==0:

self.__head=cur.next

else:

while cur != None:

cur=cur.next

if per.next.elem == item:

per.next=cur.next

return

per=per.next

def pop_n(self,position):

"""移除指定位置的元素"""

cur=self.__head

per=self.__head

count = 1

if position > self.length()-1: ### 位置超出链表元素个数时,移除最后一个元素

position = self.length()-1

if position <= 0: ### 移除首个元素

self.__head=cur.next

return cur.elem

else:

while cur != None:

cur=cur.next

if count == position:

per.next=cur.next

return cur.elem

per=per.next

count += 1

def type(self):

return "This is a single link list"

def clear(self):

"""清除列表的所有元素"""

self.__head=None

def index(self,item):

"""返回元素在链表中的位置"""

cur=self.__head

count=0

while cur.elem !=item:

cur = cur.next

count +=1

return count

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值