看了理论描述之后写不出东西。请大佬们帮帮我用python表达一下一下这个链表谢谢:1→2→4
参考一下:https://blog.csdn.net/qq_39422642/article/details/78988976
如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢
这个程序实现了创建 插入 删除等功能
#-*- coding:utf-8 _*
"""
@author: YAOTIANLONG
@file: Linklist.py
@time: 2019/10/22
"""
class ListNode:
"""单链表结点"""
def __init__(self, data, next=None):
self.data = data
self.next = next
class LinkList:
"""
单链表基本操作:
- 创建链表
- 打印链表
- 链表总长度
- 判断链表是否为空
- 在链表末尾追加元素item
- 在index位置前插入元素item
- 删除index位置上的元素
"""
def __init__(self):
self.head = None # self.head为头结点
def create(self, data):
"""
创建链表
:param data: list, 如:[1,2,3]
:return:
"""
if not isinstance(data, list) or len(data) == 0: # 特殊判断:不是列表或者列表为空,退出程序
return
self.head = ListNode(data[0]) # 创建头结点
p = self.head # 指针p指向头结点,p的类型为None
for i in data[1:]: # 在头结点后边依次插入列表剩余结点
p.next = ListNode(i)
p = p.next
def print(self):
"""
打印链表,以空格分隔,末尾换行
:return:
"""
p = self.head
while p: # 遍历链表,打印结点值
print(p.data, end=" ")
p = p.next
print()
def len(self):
"""
链表长度
:return: len
"""
p = self.head
len = 0
while p: # 遍历链表,统计结点个数
len += 1
p = p.next
return len
def is_empty(self):
"""
判断链表是否为空
:return: True or False
"""
return True if self.len() == 0 else False
def append(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) # 插入元素
def insert(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: # 特殊判断,不在列表范围,退出程序
return
if index == 0: # 在第一个位置插入
self.head = ListNode(item, self.head)
return
p = self.head
n = 0
while n < (index-1):
p = p.next
n += 1 # 找到插入位置
if index == self.len():
p.next = ListNode(item) # 在最后一个位置插入
else:
p.next = ListNode(item, p.next) # 在中间位置插入
def delete(self, index):
"""
删除链表index位置上的元素, 如:[1,2,3] =>delete(1)=> [1,3]
:param index: 索引,从0开始
:return:
"""
if index > self.len() or index < 0: # 特殊判断,不在列表范围,退出程序
return
if index == 0: # 在第一个位置插入
self.head = self.head.next # 跳过,删除元素
else:
p = self.head
n = 0
while n < (index-1):
p = p.next
n += 1 # 找到删除位置
p.next = p.next.next # 删除元素
if __name__ == "__main__":
a = LinkList()
a.create([1, 2, 4])
a.print()
print("len:", a.len())
print("head data:", a.head.data)
print("LinkList Not None" if not 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()