鏈表是一種離散存儲、可在O(1)的時間內插入但卻在O(n)的時間內查找的數據結構。
今天以單向鏈表進行鏈表這種數據結構的學習,使用Python定義鏈表類,並使用O(1)的空間複雜度進行排序。
一、單向鏈表的結構
一個單向鏈表,包head和node,而node又包含內容(data)和指向下一個node的指針(next),結構如下:
head --> [data,next]-->[data, next]-->...-->[data, None]
最後一個結點的next指向None。
二、Python實現
class Node(object):
def __init__(self, data, next=None):
self.data = data
self.next = next
class LinkedList(object):
def __init__(self):
self.head = None
self.length = 0
def crt_from_list(self, L):
L.reverse()
for l in L:
self.head = Node(l, next=self.head)
self.length += 1
return
def lineprint(self):
if not self.head:
print("NULL")
return
p = self.head
print(p.data)
while p.next:
print(p.next.data)
p = p.next
if __name__ == "__main__":
ll = LinkedList()
ll.crt_from_list(L=[3,9,5,6,4,6,2,1,0])
print("Before bubble sort:")
ll.lineprint()
# 鏈表冒泡排序
for i in range(ll.length-1):
p = ll.head
for j in range(ll.length-i-1):
if p.data > p.next.data:
temp = p.data
p.data = p.next.data
p.next.data = temp
p = p.next
print("After bubble sort:")
ll.lineprint()