使用python实现链表
2023-12-17 16:34:33
手写代码
class Node(object):
def __init__(self, item):
self.item = item
self.next = None
class LinkListFunction(object):
"""
此对象为Node对象的方法类
"""
def __init__(self):
self.linklistlength = 0 # 当前链表的长度
def create_linklist_head(self, li):
head = Node(li[0])
for element in li[1:]:
node = Node(element)
node.next = head
head = node
self.linklistlength += 1
return head
def creat_linklist_tail(self, li):
"""
尾插法
:param li:
:return:
"""
head = Node(li[0])
tail = head
for element in li[1:]:
node = Node(element)
tail.next = node
tail = node
self.linklistlength += 1
return head
def print_linklist(self, lk):
while lk:
if not lk.next:
print(lk.item)
lk = lk.next
else:
print(lk.item, end=",")
lk = lk.next
def insert_linklist(self, index, element, curNode):
"""
我们这里默认将插入的结点,插到我们的索引元素位置后方
:param index:插入的索引值位置
:param element: 插入的元素
:param curNode: 首先指向的头结点
:return:
"""
lk_head = curNode # 想用lk_head保存头指针
number = 0 # 用于判断到达了我们需要寻找的位置
if index > self.linklistlength:
raise Exception("你的索引值超过了整个链表的最大长度")
else:
while True:
if number == index:
break
curNode = curNode.next
number += 1
self.linklistlength += 1
p = Node(element) # 创建一个链表节点
p.next = curNode.next
curNode.next = p
curNode = lk_head # 让curNode指针重新指向头结点
def delete_linklist(self, index, curNode):
"""
此为整个链表的删除算法,默认删除index后方的结点
:param index:索引值
:param curNode: 头结点
:return:
"""
lk_head = curNode
number = 0 # 用与判断是否到达了我们需要寻找的位置
if index > self.linklistlength:
raise Exception("你的索引值超过了整个链表的最大长度")
else:
while True:
if number == index:
break
curNode = curNode.next
number += 1
self.linklistlength -= 1
p = curNode.next # 这是我们要删除的节点
curNode.next = curNode.next.next
del p
lkfunction = LinkListFunction()
lk = lkfunction.create_linklist_head([1, 2, 3, 4])
lkfunction.print_linklist(lk)
print(lkfunction.linklistlength)
lkfunction.insert_linklist(1, 10, lk)
lkfunction.print_linklist(lk)
print(lkfunction.linklistlength)
lkfunction.delete_linklist(0, lk)
lkfunction.print_linklist(lk)
print(lkfunction.linklistlength)
首先我们定义了一个Node对象,其接下来就是我们所有创建链表的结点对象
然后定义了一个对Node对象进行操作的一个方法类,其中包括封装好的创建链表中的头插法,尾插法,依次打印链表数据,插入结点数据,和删除加点数据。如果有什么看不懂的可以直接私信我哦!!!
输出结果
文章来源:https://blog.csdn.net/xiaoyang01234/article/details/135045095
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!