# Python資料結構與演算法之連結串列定義與用法例項詳解【單連結串列、迴圈連結串列】

（1）從連結串列節點的定義開始，以類的方式，物件導向的思想進行連結串列的設計

（2）連結串列類插入和刪除等成員函式實現時需要考慮的邊界條件，
prepend（頭部插入）、pop（頭部刪除）、append（尾部插入）、pop_last（尾部刪除）

2.1 插入：

2.2 刪除

（3）從單連結串列到單連結串列的一眾變體：

1. 連結串列節點的定義

``````
class LNode:
def __init__(self, elem, next_=None):
self.elem = elem
self.next = next_
``````

2. 單連結串列的實現

``````
pass
class LList:
def __init__(self):
def is_empty(self):
def prepend(self, elem):
def pop(self):
return e
def append(self, elem):
return
while p.next is not None:
p = p.next
p.next = LNode(elem)
def pop_last(self):
if p.next is None:
e = p.elem
return e
while p.next.next is not None:
p = p.next
e = p.next.elem
p.next = None
return e
``````

（0）能夠訪問 p.next.next 的前提是 p.next 不為空；
（1）尾部插入，如果連結串列不為空，需且僅需改變的是尾部節點的指標；
（2）尾部刪除，如果連結串列長度不為空，需且僅需改變的是倒數第二個節點的指標。

``````
class LList1(LList):
def __init__(self):
LList.__init__(self)
self._rear = None
...
``````

``````
def prepend(self, elem):
else:
def append(self, elem):
else:
self._rear.next = LNode(elem)
self._rear = self._rear.next
def pop_last(self):
if p.next is None:
e = p.elem
return e
while p.next.next is not None:
p = p.next
e = p.next.elem
self._rear = p
p.next = None
return e
``````

``````
class LCList:
def __init__(self):
self._rear = None
def prepend(self, elem):
if self._rear is None:
self._rear = LNode(elem)
self._rear.next = self._rear
else:
self._rear.next = LNode(elem, self._rear.next)
def append(self, elem):
self.prepend(elem)
self_rear = self._rear.next
def pop(self):
if self._rear is None:
p = self._rear.next
if p is None:
self._rear = None
else:
self._rear.next = p.next
return p.elem
def printall(self):
if self._rear is None:
raise ...
p = self._rear.next
while True:
print(p.elem)
if p is self._rear:
break
p = p.next
``````