以下のリストは、一方向として実装されています
# -*- coding:utf-8 -*-
class ListNode:
def __init__(self,x):
self.val = x
self.next = None
class ListLink:
#初始化
def __init__(self):
self.length = 0
self.head = None
#判断链表是否为空
def is_empty(self):
return (self.length==0)
#建表
def cre_link(self,data):
if len(data)==0:
return False
self.head = ListNode(data[0])
self.length += len(data)
pHead = self.head
for i in data[1:]:
node = ListNode(i)
pHead.next = node
pHead = pHead.next
return True
#升序排序
def ascend(self):
if self.is_empty() or self.length==1:
return False
p = self.head
lis = []
while p:
lis.append(p.val)
p = p.next
lis.sort()
ptmp = self.head
i = 0
while ptmp:
ptmp.val = lis[i]
i += 1
ptmp = ptmp.next
return True
#降序排序
def descend(self):
if self.is_empty() or self.length==1:
return False
p = self.head
lis = []
while p:
lis.append(p.val)
p = p.next
lis.sort()
ptmp = self.head
i = len(lis)-1
while ptmp:
ptmp.val = lis[i]
i -= 1
ptmp = ptmp.next
return True
#结点插入,升序插入
def insert(self, pnode):
if self.is_empty():
return False
ptmp = self.head
self.length += 1
if pnode.val < ptmp.val:
pnode.next = self.head
self.head = pnode
return True
else:
p = ptmp
ptmp = ptmp.next
while ptmp:
if p.val < pnode.val and pnode.val < ptmp.val:
pnode.next = ptmp
p.next = pnode
return True
p = ptmp
ptmp = ptmp.next
p.next = pnode
return True
#结点插入,按给的索引位置index插入
def insert_index(self,index,pnode):
if self.head is None or index > self.length :
return False
#表头插入
if index == 0 :
pnode.next = self.head
self.head = pnode
self.length += 1
return True
#表尾插入
if index == self.length:
p = self.head
while p.next:
p = p.next
p.next = pnode
self.length += 1
return True
j = 0
ptmp = self.head
while j < index-1:
ptmp = ptmp.next
j += 1
#print('**************')
pnode.next = ptmp.next
ptmp.next = pnode
self.length += 1
return True
#删除指定位置index处的结点
def delete(self,index):
if self.is_empty():
return False
if index<0 or index>=self.length :
return False
if index == 0:
self.head = self.head.next
self.length -= 1
return True
j = 0
ptmp = self.head
while j < index:
ptmp = ptmp.next
j += 1
ptmp.val = ptmp.next.val
ptmp.next = ptmp.next.next
self.length -= 1
return True
#更新指定位置index处的结点值
def update(self,index,data):
if self.is_empty():
return False
if index <0 or index >= self.length:
return False
ptmp = self.head
j = 0
while j<index:
ptmp = ptmp.next
j += 1
ptmp.val = data
return True
#查找index处的结点值
def select(self,index):
if self.is_empty():
return False
if index <0 or index >= self.length:
return False
ptmp = self.head
j = 0
while j<index:
ptmp = ptmp.next
j += 1
print('the value in location of '+str(index)+' is '+str(ptmp.val))
return True
#遍历输出链表
def traveling(self):
if self.is_empty():
return False
else:
tmp=self.head
while tmp!=None:
#print(str(tmp.val),end=' ')
print(tmp.val, end=' ')
tmp = tmp.next
print()
return True
#测试
if __name__ == '__main__':
ll = ListLink()
data = [555,2,333,4,5,6]
#print(len(data))
ll.cre_link(data)
aa = 1
dd = ListNode(99)
ll.insert_index(1, dd)
ll.traveling()
ll.select(aa)
ll.update(4,666)
print('after update:')
ll.traveling()
ll.delete(1)
ll.traveling()
ll.delete(0)
ll.traveling()
ll.ascend()
ll.traveling()
ll.descend()
ll.traveling()