Python单链表
一、具体操作
1. 结点类
- 创建新结点
class Node(object):
def __init__(self, data):
self.data = data
self.next = None
2. 单链表类
- 初始化头结点函数
class LinkedList(object):
def __init__(self):
self.head = Node(None)
- 创建单链表
def CreateList(self):
cNode = self.head
print('输入 # 停止输入')
temp_data = input()
while temp_data != '#':
nNode = Node(temp_data)
nNode.next = cNode.next
cNode.next = nNode
cNode = nNode
temp_data = input()
- 在头结点之后插入结点
def InsertAfterHead(self, data):
nNode = Node(data)
nNode.next = self.head.next
self.head.next = nNode
- 在尾部插入结点
def InsertInTheEnd(self, data):
nNode = Node(data)
cNode = self.head
while cNode.next is not None:
cNode = cNode.next
nNode.next = cNode.next
cNode.next = nNode
- 在第i个位置插入结点
def InsertAtI(self, i, data):
cNode = self.head
temp_length = 0
while cNode.next is not None:
cNode = cNode.next
temp_length += 1
if temp_length < i:
nNode = Node(data)
cNode = self.head
while cNode.next is not None:
cNode = cNode.next
nNode.next = cNode.next
cNode.next = nNode
else:
nNode = Node(data)
temp_num = 1
cNode = self.head
while temp_num < i:
cNode = cNode.next
temp_num += 1
nNode.next = cNode.next
cNode.next = nNode
- 删除第i个位置的结点
def DeleteAtI(self, i):
cNode = self.head
temp_length = 0
while cNode.next is not None:
cNode = cNode.next
temp_length += 1
if temp_length < i:
print('该位置结点不存在')
else:
temp_num = 0
cNode = self.head
while temp_num < i:
cNode = cNode.next
temp_num += 1
temp_Node = cNode.next
temp_num = 0
cNode = self.head
while temp_num < i - 1:
cNode = cNode.next
temp_num += 1
cNode.next = temp_Node
- 获得当前单链表的长度
def GetLength(self):
cNode = self.head
temp_num = 0
while cNode.next is not None:
cNode = cNode.next
temp_num += 1
if temp_num == 0:
print('该链表为空')
else:
print('该链表的长度为%d' % temp_num)
- 遍历当前单链表
def TraverseList(self):
if self.head:
cNode = self.head.next
print(cNode.data, end=' ')
while cNode.next is not None:
cNode = cNode.next
print(cNode.data, end=' ')
print()
else:
print('该链表为空')