#!usr/bin/env python #-*- coding:utf-8 _*"""
@author: YAOTIANLONG
@file: Linklist.py
@time: 2019/10/22
"""classListNode:"""单链表结点"""def__init__(self, data,next=None):
self.data = data
self.next=nextclassLinkList:"""
单链表基本操作:
- 创建链表
- 打印链表
- 链表总长度
- 判断链表是否为空
- 在链表末尾追加元素item
- 在index位置前插入元素item
- 删除index位置上的元素
"""def__init__(self):
self.head =None# self.head为头结点defcreate(self, data):"""
创建链表
:param data: list, 如:[1,2,3]
:return:
"""ifnotisinstance(data,list)orlen(data)==0:# 特殊判断:不是列表或者列表为空,退出程序return
self.head = ListNode(data[0])# 创建头结点
p = self.head # 指针p指向头结点,p的类型为Nonefor i in data[1:]:# 在头结点后边依次插入列表剩余结点
p.next= ListNode(i)
p = p.nextdefprint(self):"""
打印链表,以空格分隔,末尾换行
:return:
"""
p = self.head
while p:# 遍历链表,打印结点值print(p.data, end=" ")
p = p.nextprint()deflen(self):"""
链表长度
:return: len
"""
p = self.head
len=0while p:# 遍历链表,统计结点个数len+=1
p = p.nextreturnlendefis_empty(self):"""
判断链表是否为空
:return: True or False
"""returnTrueif self.len()==0elseFalsedefappend(self, item):"""
在链表末尾追加元素, 如:[1,2,3] =>append(4)=> [1,2,3,4]
:param item: 追加元素的值
:return:
"""
p = self.head
while p.next:
p = p.next# 找到末尾位置
p.next= ListNode(item)# 插入元素definsert(self, index, item):"""
在链表index位置之前插入元素item, 如:[1,2,3] =>insert(1,4)=> [1,4,2,3]
:param index: 索引,从0开始
:param item: 元素的值
:return:
"""if index > self.len()or index <0:# 特殊判断,不在列表范围,退出程序returnif index ==0:# 在第一个位置插入
self.head = ListNode(item, self.head)return
p = self.head
n =0while n <(index-1):
p = p.next
n +=1# 找到插入位置if index == self.len():
p.next= ListNode(item)# 在最后一个位置插入else:
p.next= ListNode(item, p.next)# 在中间位置插入defdelete(self, index):"""
删除链表index位置上的元素, 如:[1,2,3] =>delete(1)=> [1,3]
:param index: 索引,从0开始
:return:
"""if index > self.len()or index <0:# 特殊判断,不在列表范围,退出程序returnif index ==0:# 在第一个位置插入
self.head = self.head.next# 跳过,删除元素else:
p = self.head
n =0while n <(index-1):
p = p.next
n +=1# 找到删除位置
p.next= p.next.next# 删除元素if __name__ =="__main__":
a = LinkList()
a.create([1,2,4,3,8,9])
a.print()print("len:", a.len())print("head data:", a.head.data)print("LinkList Not None"ifnot a.is_empty()else"LinkList is None")
a.append(20)
a.print()
a.insert(0,30)
a.print()
a.delete(a.len()-1)
a.print()
输出结果:
C:\Software\Anaconda3\envs\tf_gpu\python.exe D:/PycharmProjects/DataStruct/Linklist.py
124389len:6
head data:1
LinkList Not None124389203012438920301238920
Process finished with exit code 0