链表是一种离散存储、可在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()