python實(shí)現(xiàn)雙鏈表操作

雙向鏈表

雙向鏈表又叫做雙鏈表,每個(gè)節(jié)點(diǎn)有兩個(gè)指針域和一個(gè)數(shù)據(jù)域。prev指針域指向前一個(gè)節(jié)點(diǎn),next指針域指向下一個(gè)節(jié)點(diǎn)。注意,第一個(gè)節(jié)點(diǎn)的prev指針域指向空值,最后一個(gè)節(jié)點(diǎn)的next域也是指向空值。

雙鏈表的主要操作跟單鏈表一樣,具有如下操作

1. is_empty() 鏈表是否為空

2. length() 鏈表長度

3. travel() 遍歷整個(gè)鏈表

4. add(item) 鏈表頭部添加元素

5.? append(item) 鏈表尾部添加元素

6.? insert(pos, item) 指定位置添加元素

7. remove(item) 刪除節(jié)點(diǎn)

8. search(item) 查找節(jié)點(diǎn)是否存在

python 實(shí)現(xiàn):

#_*_coding:utf-8_*_

class Node(object):

? ? def __init__(self, item):

? ? ? ? self.item = item

? ? ? ? self.prev = None

? ? ? ? self.next = None

class DoubleLinkList(object):

? ? def __init__(self, node=None):

? ? ? ? '''_head 作為類內(nèi)部使用,對(duì)外不可見'''

? ? ? ? self.__head = node

? ? def is_empty(self):

? ? ? ? '''判斷鏈表是否為空'''

? ? ? ? return self.__head is None

? ? def length(self):

? ? ? ? '''鏈表的長度'''

? ? ? ? #特別要考慮當(dāng)鏈表是空的情況

? ? ? ? # cur游標(biāo),用來移動(dòng)遍歷節(jié)點(diǎn)

? ? ? ? cur = self.__head

? ? ? ? count = 0

? ? ? ? while cur != None:

? ? ? ? ? ? count += 1

? ? ? ? ? ? cur = cur.next

? ? ? ? return count

? ? def travel(self):

? ? ? ? '''遍歷整個(gè)鏈表'''

? ? ? ? cur = self.__head

? ? ? ? if cur == None:

? ? ? ? ? ? print("empty linklist")

? ? ? ? ? ? return

? ? ? ? while cur != None:

? ? ? ? ? ? print(cur.item, end=' ')

? ? ? ? ? ? cur = cur.next

? ? ? ? print('')

? ? def add(self,item):

? ? ? ? '''在鏈表頭部添加元素,頭插法'''

? ? ? ? node = Node(item)

? ? ? ? #指針指向的順序可以變化

? ? ? ? node.next = self.__head

? ? ? ? self.__head = node

? ? ? ? node.next.prev = node

? ? def append(self,item):

? ? ? ? '''在鏈表尾部添加元素'''

? ? ? ? node = Node(item)

? ? ? ? cur = self.__head

? ? ? ? #如果鏈表是空,則將頭節(jié)點(diǎn)直接指向Node

? ? ? ? if self.is_empty():

? ? ? ? ? ? self.__head = node

? ? ? ? else:

? ? ? ? ? ? while cur.next != None:

? ? ? ? ? ? ? ? cur = cur.next

? ? ? ? ? ? cur.next = node

? ? ? ? ? ? node.prev = cur

? ? def insert(self,pos, item):

? ? ? ? '''在鏈表指定的位置添加元素'''

? ? ? ? """

? ? ? ? :param pos從0開始

? ? ? ? """

? ? ? ? if pos <= 0:

? ? ? ? ? ? self.add(item)

? ? ? ? elif pos > (self.length() -1):

? ? ? ? ? ? self.append(item)

? ? ? ? else:

? ? ? ? ? ? cur = self.__head

? ? ? ? ? ? count = 0

? ? ? ? ? ? while count < pos:

? ? ? ? ? ? ? ? count += 1

? ? ? ? ? ? ? ? cur = cur.next

? ? ? ? ? ? node = Node(item)

? ? ? ? ? ? node.next = cur

? ? ? ? ? ? cur.prev.next = node

? ??????????node.prev = cur.prev

? ? ? ? ? ? ?cur.prev = node


? ? def remove(self, item):

? ? ? ? '''刪除某個(gè)元素的節(jié)點(diǎn)'''

? ? ? ? cur = self.__head

? ? ? ? while cur != None :

? ? ? ? ? ? if cur.item == item:

? ? ? ? ? ? ? ? #先判斷此節(jié)點(diǎn)是否為頭節(jié)點(diǎn)

? ? ? ? ? ? ? ? if cur == self.__head:

? ? ? ? ? ? ? ? ? ? self.__head = cur.next

? ? ? ? ? ? ? ? ? ? if cur.next:

? ? ? ? ? ? ? ? ? ? ? ? #要判斷鏈表是否只有一個(gè)節(jié)點(diǎn)

? ? ? ? ? ? ? ? ? ? ? ? cur.next.prev = None

? ? ? ? ? ? ? ? else:

? ? ? ? ? ? ? ? ? ? cur.prev.next = cur.next

? ? ? ? ? ? ? ? ? ? if cur.next:

? ? ? ? ? ? ? ? ? ? ? ? #如果刪除的不是最后一個(gè)節(jié)點(diǎn)

? ? ? ? ? ? ? ? ? ? ? ? cur.next.prev = cur.prev

? ? ? ? ? ? ? ? break

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? cur = cur.next

? ? def search(self, item):

? ? ? ? ''' 查找節(jié)點(diǎn)是否存在'''

? ? ? ? cur = self.__head

? ? ? ? while cur != None:

? ? ? ? ? ? if cur.item == item:

? ? ? ? ? ? ? ? return True

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? cur = cur.next

? ? ? ? return False


if __name__ == '__main__':

? ? ll = DoubleLinkList()

? ? print(ll.is_empty())

? ? print(ll.length())

? ? ll.append(1)

? ? ll.append(2)

? ? ll.travel()

? ? ll.add(3)

? ? ll.travel()

? ? ll.insert(2, 4)

? ? ll.travel()

? ? print(ll.search(3))

? ? ll.travel()

? ? ll.remove(2)

? ? ll.travel()


運(yùn)行結(jié)果:

True

0

1 2

3 1 2

3 1 4 2

True

3 1 4 2

3 1 4

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容