【python】关于python的链表结构实现
生活随笔
收集整理的這篇文章主要介紹了
【python】关于python的链表结构实现
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【參考】
【https://blog.csdn.net/weixin_37728031/article/details/81145258】【注意鏈表結(jié)構(gòu),節(jié)點(diǎn)包括數(shù)值和next、鏈表中的head】
【https://www.cnblogs.com/yudanqu/p/9172459.html】【鏈表的類的實(shí)現(xiàn)】【* 畫一下圖有助于理解節(jié)點(diǎn)和鏈表】
【https://www.cnblogs.com/linxiyue/p/3551633.html】【Node和單鏈表】
【https://blog.csdn.net/su_bao/article/details/81065746】【一些鏈表的操作】
【https://www.cnblogs.com/yudanqu/p/9172459.html】【鏈表的構(gòu)建+鏈表的實(shí)例化(main)】
?
【實(shí)踐】
?
# -*- coding:UTF-8 -*-class Node():def __init__(self, item):self._item=itemself._next=Nonedef getItem(self):return self._itemdef getNext(self):return self._nextdef setItem(self, newitem):self._item=newitemdef setNext(self, newnext):self._next=newnextclass SingleLinkedList():def __init__(self):self._head=Noneself._size=0# 檢測(cè)鏈表是否是空的def isEmpty(self):return self._head==Nonedef size(self):current=self._headcount=0while current!=None: # 這處的判斷不可以是current.getNext()!=None 因?yàn)樽詈笠粋€(gè)節(jié)點(diǎn)雖然指向?yàn)镹one,但他的val值存在,該節(jié)點(diǎn)需要計(jì)入size長(zhǎng)度count+=1current=current.getNext()return countdef travel(self):current=self._headwhile current!=None: # 這處的判斷不可以是current.getNext()!=None 因?yàn)樽詈笠粋€(gè)節(jié)點(diǎn)雖然指向?yàn)镹one,但他的val值是需要打印的print current.getItem(), '=>' # print current.getNext(), '=>' # 打印出來(lái)的是內(nèi)存地址current=current.getNext()# add方法,在鏈表前段添加節(jié)點(diǎn)元素def add(self, item):temp=Node(item)temp.setNext(self._head) # self下的是鏈表當(dāng)前頭節(jié)點(diǎn),temp是要新加的節(jié)點(diǎn);self._head目前指向的是當(dāng)前節(jié)點(diǎn),并把指向賦給temp的next指針,則temp的next指針指向當(dāng)前節(jié)點(diǎn);self._head=temp # 把當(dāng)前鏈表的head指針指向新的節(jié)點(diǎn),即temp這個(gè)點(diǎn)# append方法,在鏈表尾部添加節(jié)點(diǎn)元素def append(self, item):temp=Node(item)if self.isEmpty():self._head=temp # 若鏈表是空的,則將頭節(jié)點(diǎn)指向要添加的元素else:current=self._head # 此刻current是一個(gè)具體節(jié)點(diǎn),self指的是鏈表while current.getNext()!=None:current=current.getNext()current.setNext(temp)# search方法,用來(lái)檢測(cè)某節(jié)點(diǎn)元素是否在鏈表中def search(self, item):current=self._headfounditem = Falsewhile current!=None and not founditem:if current.getItem()==item:founditem=Trueelse:current=current.getNext()return founditem# index方法,用來(lái)索引節(jié)點(diǎn)元素在鏈表中的位置def index(self,item):current=self._headcount=0found=Falsewhile current!=None and not found:count+=1 # count+=1 和 count++ 一致性if current.getItem()==item:found=Trueelse:current=current.getNext()if found:return countelse:raise ValueError, '%d is not in linkedlist' %item # raise方法的用處,print里 % 與 {} 的占位作用區(qū)別是?{}好像是帶格式輸出# remove方法,刪除鏈表中的某個(gè)元素節(jié)點(diǎn)def remove(self,item):current=self._headpre=Nonewhile current!=None:if current.getItem()==item:if not pre: # if pre 代表在問(wèn)pre是不是真的;if not pre 在問(wèn)pre是不是假的;self._head=current.getNext()else:pre.setNext(current.getNext())break # break語(yǔ)句用在while和for循環(huán)中,此處打破了所在的while循環(huán)else:pre=currentcurrent=current.getNext()# insert方法,在鏈表中指定位置插入節(jié)點(diǎn)元素def insert(self,pos,item):if pos<=1:self.add(item)elif pos>self.size():self.append(item)else:temp = Node(item)current = self._headcount = 1pre = Nonewhile count < pos:pre = currentcurrent = current.getNext()count += 1pre.setNext(temp)temp.setNext(current)if __name__=="__main__":l1=SingleLinkedList()print (l1.isEmpty())print '======0======='l1.append(3)l1.add(999)print (l1.isEmpty())print 'size is :', l1.size()l1.travel()print '======1======='l1.insert(-3,110)print 'size is :', l1.size()l1.travel()print '======2======='l1.insert(99, 111) #雖然要求insert位置是99,但實(shí)際上插在最后一個(gè)節(jié)點(diǎn),即第4個(gè)print 'size is :', l1.size()l1.travel()print '======3======='l1.insert(90, 10) # 雖然要求insert位置是90,但實(shí)際上當(dāng)前90位不存在,所以插在當(dāng)前最后一個(gè)節(jié)點(diǎn),即第5個(gè)print 'size is :', l1.size()print 'Value %d index is :'% 999, l1.index(999)l1.travel()print '======4======='l1.remove(111)print 'size is :', l1.size()l1.travel()?
?
?
?
?
?
?
?
【補(bǔ)充】
?
轉(zhuǎn)載于:https://www.cnblogs.com/anno-ymy/p/11125969.html
總結(jié)
以上是生活随笔為你收集整理的【python】关于python的链表结构实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: git学习资料
- 下一篇: Postman使用方法示例