python单链表逆序_Python3玩转单链表——逆转单向链表pythonic版

这篇博客详细介绍了如何使用Python实现单向链表的数据结构,包括初始化、创建、生成、打印、长度计算、判断空、获取、删除、插入、修改、追加和逆转等基本操作。通过示例代码展示了各个方法的使用,并提供了辅助的显示方法来展示操作前后链表的状态。
摘要由CSDN通过智能技术生成

'''Python版单向链表-单向链表简称单链表

单链表中所包含的基本操作:

初始化

创建

链表生成器

打印

显示调用过程

计算长度

判空

获取

删除

插入

修改

追加

逆转单向链表'''

classNode(object):#节点初始化

def __init__(self, value, p=None):

self.value=value

self.next=pclassLinkList(object):#初始化单链表

def __init__(self):

self.head=None#创建单链表

defcreate(self, node_value_list):

self.head=Node(node_value_list[0])

p=self.headfor i in node_value_list[1:]:

p.next=Node(i)

p=p.next#生成单链表

defgenerate(self):

p=self.headwhile p !=None:yieldp.value

p=p.next#打印单链表

def print(self):print([i for i inself.generate()])#显示方法调用前后的单链表

defshow(func):def wrapper(self, *args):print("方法{func_name}执行前".format(func_name=func.__name__))

self.print()print("方法{func_name}执行中".format(func_name=func.__name__))

func(self,*args)print("方法{func_name}执行后".format(func_name=func.__name__))

self.print()returnwrapper#获取单链表的长度

deflength(self):

p=self.head

length=0while p !=None:

length+= 1p=p.nextreturnlength#判断单链表是否为空

defis_null(self):return self.length() ==0#获取单链表偏移位元素返回并打印其节点值

#支持顺序索引和逆序索引:0代表索引0位,-1代表倒数第一位,-2代表倒数第二位

#获取不存在的位返回None

defget(self, offset):

p=self.head

index=0

length=self.length()if offset > length - 1:print(None)returnNoneif offset < 0 and offset + length <0:print(None)returnNoneif offset < 0 and offset + length >=0:

offset= length +offsetwhile index < length - 1 and index

p=p.next

index+= 1

print("获取索引{index}位节点-值为{value}".format(index=index, value=p.value))returnp#删除单链表偏移位元素并打印

#支持顺序索引和逆序索引:0代表索引0位,-1代表倒数第一位,-2代表倒数第二位

#删除不存在的位返回None

@showdefremove(self, offset):

p=self.head

length=self.length()

index=0if offset > length - 1:print(None)returnNoneif offset == 0 or offset + length ==0:print("删除索引{index}位节点-值为{value}".format(index=index, value=self.head.value))

self.head=p.nextreturnNoneif offset < 0 and length + offset >0:

offset= length +offsetwhile index < length - 1 and index < offset - 1:

p=p.next

index+= 1

print("删除索引{index}位节点-值为{value}".format(index=index + 1, value=p.next.value))

p.next=p.next.next#在指定index位插入节点-值为value

#什么是插入——在两个节点之间加入才叫插入

#所以在末尾插入的意思就是在索引倒数第二位和倒数第一位之间插入

@showdefinsert(self, offset, value):

length=self.length()#如果偏移量对应的索引位不在链表对应索引位范围内-返回None

if offset > length - 1 or offset + length <0:returnNoneif offset <0:

offset= offset +length

node=Node(value)if offset == 0 or offset + length ==0:

p=self.head

self.head=node

node.next=pelse:

previous_node= self.get(offset - 1)

current_node=self.get(offset)

previous_node.next=node

node.next=current_nodeprint("在索引{index}位插入节点-值为{value}".format(index=offset, value=value))#在链表索引末位追加一个节点-值为value

@showdefappend(self, value):

last_node= self.get(self.length() - 1)

last_node.next=Node(value)#修改链表索引位节点值

@showdefmodify(self, offset, value):

self.get(offset).value=value#逆向生成单向链表

@showdefreverse(self):#将节点生成器转变为列表并逆序

reverse_list = [i for i in self.generate()][::-1]

self.head=Node(reverse_list[0])

p=self.headfor i in reverse_list[1:]:

p.next=Node(i)

p=p.nextif __name__ == '__main__':

list= [1, 2, 33, 4, 55, 6, 76, 78]#初始化链表

link_list =LinkList()#创建链表

link_list.create(list)#获取节点

link_list.get(-1)#删除节点

link_list.remove(0)#插入节点

link_list.insert(-2, 0.2)#末位追加节点

link_list.append(3)#修改节点值

link_list.modify(-1, 666)#逆转

link_list.reverse()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值