链式链表实现的基本模块是节点,节点有一个数据区(包含列表元素本身)和一个引用到下一项
(1)定义一个链表节点
class Node(object):#定义一个链表
def __init__(self,value):
self.val = value
self.next = None
(2)初始化
def __init__(self):#初始化,其中的self.head代表class Node中定义的一个节点
self.head = None
self.len = 0
(3)判断是否为空
def is_empty(self):
return (self.len==0)
(4)在末尾插入一个节点元素
def append(self,value):#在末尾插入一个节点
node = Node(value)
if self.head is None:#self.head指链表中的第一个节点
self.head = node
else:
pre = self.head
while pre.next:
pre = pre.next
pre.next = node
self.len = self.len+1
(5)在某一个位置插入一个节点元素
def insert(self, index, value):#index指的是插入的位置,value是插入的节点的元素
if index > self.len:
raise IndexError('out of range')
else:
node = Node(value)
if index == 0:
node.next = self.head
self.head = node#插入在第一个位置
elif index == self.len:
self.append(value)
else:
head = self.head#self.head指链表中的第一个节点
cur_index = 0
while head:
if cur_index + 1 == index:
nex = head.next
head.next = node
node.next = nex
break
cur_index += 1
head = head.next
self.len += 1
(6)删除某个位置的元素
def delete(self, index):
if index >= self.len:
raise IndexError('out of range')
else:
if index == 0:
self.head = self.head.next
else:
head = self.head
cur_index = 0
while head:
if cur_index + 1 == index:
head.next = head.next.next
break
cur_index += 1
head = head.next
self.len += 1
(7)所有元素倒置
def reverse(self):
pre = None
cur = self.head
while cur:
nex = cur.next
cur.next = pre
pre = cur
cur = nex
self.head = pre
整体的代码:
if __name__ == '__main__':
linkList = LinkList()
print(linkList.is_empty())
linkList.append(6)
linkList.append(7)
print(linkList.is_empty())
linkList.insert(0,1)
linkList.reverse()
head = linkList.head
while head:
print(head.val)
head = head.next