Python 链表的基本操作
一、链表简介
链表是一种在存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针链接次序实现。链表是由一系列的结点组成,结点可以在运行时动态生成。每个结点包含两部分:数据域与指针域。数据域存储数据元素,指针域存储下一结点的指针。
二、单链表
单向链表也叫单链表,是链表中最简单的形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
1.定义节点
// An LinkList node
class Node(object):
def __init__(self,value):
self.value = value
self.next = None
2.定义链表
// 定义单链表和基本操作
class LinkList(object):
// 初始化链表
def __init__(self):
self.head = None
//判断链表是否为空
def isempty(self):
return self.head == None
//链表长度
def GetLength(self):
length = 0
cur = self.head
while cur != None:
length += 1
cur = cur.next
return length
// 遍历链表
def PrintLinkList(self):
cur = self.head
while cur != None:
print(cur.value)
cur = cur.next
// 从尾部添加节点
def AddNodeFromtail(self, value):
NewNode = Node(value)
if self.isempty():
self.head = NewNode
else:
cur = self.head
while cur.next != None:
cur = cur.next
cur.next = NewNode
//从头部添加节点
def AddNodeFromhead(self,value):
NewNode = Node(value)
cur = self.head
NewNode.next = cur
self.head = NewNode
//指定一个位置插入节点
def Insert(self, value, index):
NewNode = Node(value)
if index <= 0:
NewNode.next = self.head
elif index > self.GetLength():
self.AddNodeFromtail(value)
else:
cur = self.head
for i in range(index-1):
cur = cur.next
NewNode.next = cur.next
cur.next = NewNode
//删除指定位置的节点:
def DeleteNode(self,index):
if isempty():
print("this linklist is empty")
if index < 0 or index >= self.GetLength():
print("error: out of inedx")
cur = self.head
for i in range(index-1):
cur = cur.next
cur.next = cur.next.next