鏈表組成
Python 中鏈表由 head、 節點、tail、 三部分組成。
- 節點為Python 鏈表中最重要的部分,通過構建class Node()類,節點引入並存儲value和next變量,其中value為Node中存儲的鏈表內容,next為Node中存儲的指針,指向下一個Node。即Node由指針域next和結構域value構成。
- 鏈表由上述Node連結而成,其中head指向鏈表的第一個節點,tail指向鏈表最後一個節點。
- tail指向的尾端Node的next指向(存儲)None,即該Node的指針域存儲 None的內存地址。
示例代碼:
class Node():
def __init__(self, context=None, next=None):
self._context = context # 提高代碼的健壯性 類似Java 的處理 需要定義函數獲取參數數據
self._next = next
def getContext(self):
return self._context
def getNext(self):
return self._next
def setContext(self, newContext):
self._context = newContext
def setNext(self, newNext):
self._next = newNext
class LinkedList():
def __init__(self):
self._head = None
self._tail = None
self._length = 0
def isempty(self):
return self._head is None
def add(self, newadding):
newNode = Node()
newNode.setContext(newadding)
newNode.setNext(self._head)
self._head = newNode
if self._tail is None:
self._tail = newNode
self._length += 1
def append(self, newAppending):
newANode = Node()
newANode.setContext(newAppending)
if self._head is None:
self._tail = newANode
self._head = newANode
else:
self._tail.setNext(newANode)
self._tail = newANode
self._length += 1
def remove(self, context):
previous = None
current = self._head
while current is not None:
if current.getContext() == context:
if not previous:
self._head = current.getNext()
else:
previous.setNext(current.getNext())
break
else:
previous = current
current = current.getNext()
def search(self, context):
current = self._head
result = False
while current is not None and not result:
if current.getContext() == context:
result = True
else:
current = current.getNext()
return result
def items(self):
cur = self._head
while cur is not None:
yield cur.getContext()
cur = cur.getNext()
@property
def tail(self):
return self._tail
if __name__ == '__main__':
LL = LinkedList()
print(LL.isempty())
LL.add(1)
LL.add(2)
print(LL._tail.getContext())
print(LL)
for i in LL.items():
print(i)
print(LL.search(2))
LL.append(3)
for i in LL.items():
print(i)
LL.remove(1)
for i in LL.items():
print(i)
print(LL.search(1))
print(LL._tail.getContext())
上述示例運行結果如下:
True
1
<__main__.LinkedList object at 0x000002157A80BFD0>
2
1
True
2
1
3
2
3
False
3