单链表的基本操作
首先创建一个结点类的结构,以便后面的操作
class Node(object):
def __init__(self,data):
self.data=data
self.next=None
创建一个链表类
class LinkList(object):
def __init__(self):
self.head=Node(None)
#判断是否为空
def isEmpty(self):
p=self.head#头指针
if p.next==None:
print("Link is Empty")
return True
return False
#打印链表
def printLink(self):
if self.isEmpty():
return False
p=self.head
while p:
print(p.data,end='')
p=p.next
创建单链表是一个动态生成链表的过程,就是从一个空的单链表开始,依次建立各个元素的结点,并把它们依次插入链表
def InitList(self,data):
self.head=Node(data[0])#头结点
p=self.head#头指针
for i in data[1:]:
node=Node(i)
p.next=node
p=p.next
计算单链表的长度
在使用链表时,经常需要求表的长度,为此创建一个求表长的函数,从左到右,遍历表中所有的元素,并完成计数
def LengthList(self):
if self.isEmpty():
return 0
p=self.head
cut=0
while p:
cut+=1
p=p.next
return cut
单链表的插入
假设我们要把结点q插入到结点p的后面,只要把结点q插入到结点p和结点p.next 之间就行。
只要让q.next和p.next 指针改变,让p的后继结点改为q的后继结点,再把q的后继结点变成p的后继结点,插入操作的顺序不能打乱
def InsertList(self,s,data):
if self.isEmpty() or s<0 or s>self.LengthList():
print("Insert failed")
return
p=self.head
index=1
while index<s:
p=p.next
index+=1
node=Node(data)
node.next=p.next
p.next=node
表单的删除
如果想要删除结点q,其实就是把它的前继结点p指针绕过q,直接指向q的后继结点 如图
让p.next 直接为p 的next 的 next , p 的next 为q ,所有就是p.next=q.next
def DeleList(self,s):
if self.isEmpty() or s<0 or s>self.LengthList():
print("Dele failed")
return
index =1
p=self.head
while index<s:
pre =p
index+=1
p=p.next
pre.next=p.next
p=None
整体代码如下
#-*- coding:utf-8 -*-
#__auther__:WM
class Node(object):
#定义一个结点类
def __init__(self,data):
self.data=data
self.next=None
#创建一个链表类
class LinkList(object):
def __init__(self):
self.head=Node(None)
#判断是否为空
def isEmpty(self):
p=self.head#头指针
if p.next==None:
print("Link is Empty")
return True
return False
#打印链表
def printLink(self):
if self.isEmpty():
return False
p=self.head
while p:
print(p.data,end='')
p=p.next
#创建单链表
def InitList(self,data):
self.head=Node(data[0])#头结点
p=self.head#头指针
for i in data[1:]:
node=Node(i)
p.next=node
p=p.next
#单链表的长度
def LengthList(self):
if self.isEmpty():
return 0
p=self.head
cut=0
while p:
cut+=1
p=p.next
return cut
#单链表的插入
def InsertList(self,s,data):
if self.isEmpty() or s<0 or s>self.LengthList():
print("Insert failed")
return
p=self.head
index=1
while index<s:
p=p.next
index+=1
node=Node(data)
node.next=p.next
p.next=node
#单链表的删除操作
def DeleList(self,s):
if self.isEmpty() or s<0 or s>self.LengthList():
print("Dele failed")
return
index =1
p=self.head
while index<s:
pre =p
index+=1
p=p.next
pre.next=p.next
p=None
#单链表的读取
def GetList(self,s):
if self.isEmpty()or s<0 or s>self.LengthList():
print("error!")
return
index=1
p=self.head
while index<s:
index+=1
p=p.next
print("第{}个值是{}".format(s,p.data))