导航:首页 > 编程语言 > python链表翻转

python链表翻转

发布时间:2022-09-01 20:23:11

1. 关于python链表的运行

看你运行几次,我给你一条一条说

头 1->2->3->4->5->6->7->8->9 NONE

pointer=head #这里你没说清,我先假设这个head是链表的第一个,1
newnode={ } #空字典
newnode['data']=20 #添加关键字data=20进字典。
newnode['next']=pointer #字典的next目标指向pointer,也就是head,也就是1,但是是链表这个object,不是指向一个数字
head=newnode #重新定义head为newnode这个字典。head指向{‘data’:20, ‘next’:pointer}这个字典。
pointer=pointer['next'] #pointer指向pointer['next'],也就是pointer现在指向链表的第二个,2
pointer['next']=none #pointer['next']设为none,也就是现在pointer这个链表就被截断了。只包含1->2->none

2. python有链表吗

python中的链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接。链表有两种类型:单链表和双链表。
链表的数据结构
在链表中删除操作可以通过修改指针来实现,
插入则是调整,插入点的前后两个指针的指向关系,
在python中每个变量都是指针,例如:

用内置数据结构(list,dict,tuple等)的嵌套/组合,它们隐式地包含了指向/嵌套关系,如graph[u][v]={w0,w1..}类的成员变量、嵌套类可能包含了指向/嵌套关系;
引用表示指向关系,只不过引用不能像指针一样运算,比如p+1指向下一个元素,所以可能限制颇多。因此,要实现链表的操作,不能和c一样直接对指针进行操作。
python学习网,大量的免费python视频教程,欢迎在线学习!

3. Python 迭代反转一个List, 要求 Space O(1).

给你思路,用一个while循环,里面有两个指针i和j i指向0位 j指向最后一位。 循环体每次交换list[i]和list[j],这里交换只需要一个变量(其实以Python语法甚至可以不用声明中间变量) 交换完了i加1 j减1,直到i和j相等就退出循环。

4. 给个链表,翻转相邻的节点,即0和1翻转,2和3翻转,用python

#Definitionforsingly-linkedlist.
#classListNode(object):
#def__init__(self,x):
#self.val=x
#self.next=None

classSolution(object):
defswapPairs(self,head):
"""
:typehead:ListNode
:rtype:ListNode
"""
ifhead==None:
returnNone;
ifhead.next==None:#只有一个节点的情况
returnhead;
node=head;
result=head.next;#交换之后链表的头节点
whilenodeandnode.next:#还存在下一对节点
temp=node.next;#作节点交换处理
node.next=temp.next;
temp.next=node;
temp=node.next;
iftempandtemp.next:#如果下对节点有两个的话,当前这对节点第二个节点指向下对节点的第二个节点
node.next=temp.next;
node=temp;
returnresult;

5. 如何在Python中反转列表的一部分

>>> a=[1,2,3,4,5,6,7,8,9]
>>> a[2:5]=a[5-1:2-1:-1]
>>> a
[1, 2, 5, 4, 3, 6, 7, 8, 9]

6. python 如何实现反转倒序

#1.字符串、列表、元组均可用此方法(使用切片的方法)不修改元素原有内容,将输出进行赋值
#1.1字符串
s='nihao'
s1=s[::-1]
#1.2列表
lin=["a","b","c"]
print(lin[::-1])
#1.3元组
tup=("e","f","g","h",2,3,6)
print(tup[::-1])

#2.列表独有方法
lin=["a","b","c"]
lin.reverse()
print(lin)

7. 谁能跟我解释下python的字符串反转的原理

[::-1]实现翻转功能。

Python 的切片功能实际上比很多程序员认为的更强大。
a = m [ 0 : 100 : 10 ] # 带步进的切片(步进值=10)

注意:步进值为step
当step > 0 时
切片从 start(含start)处开始,到end(不含end)处结束,**从左往右**,每隔(step-1)(索引之间的差仍为step,但相隔的元素是step-1个)个元素进行一次截取。
这时,start 指向的位置应该在end指向的位置的左边,否则返回值为空

当step < 0 时
切片从 start(含start)处开始,到end(不含end)处结束,**从右往左**,每隔(step-1)(索引之间的差仍为step,但相隔的元素是step-1个)个元素进行一次截取。
这时,start 指向的位置应该在end指向的位置的右边,否则返回值为空

8. python list里的list元素颠倒位置

Python编程实现list反转(元素颠倒位置)的方法,代码如下:

importmath
defresv(li):
new=[]
ifli:
cnt=len(li)
foriinrange(cnt):
new.append(li[cnt-i-1])
returnnew

defresv2(li):
li.reverse()
returnli
defresv3(li):
hcnt=int(math.floor(len(li)/2))
tmp=0
foriinrange(hcnt):
tmp=li[i]
li[i]=li[-(i+1)]
li[-(i+1)]=tmp
returnli

li=[1,2,3,4,5]
printresv(li)

9. python编程中实现linkedlist(链表)报错是因为什么,怎么解决

楼主你好!

看你的代码存在很多问题,一个个来说明

1)首先你代码的报错源于你想用list来展开你的SLinkedList类,在python中,除非内置的可迭代对象外,其他都需要实现__iter__()函数,才能用list来进行展开。注意:判断一个对象是否可迭代,请使用isinstance(obj, Iterable)来判断obj是不是可以迭代,Iterable需要从collections中导入

2)插入的方法存在严重问题,按楼主的方法插入的话,因为头节点始终在变,所以当你需要遍历链表的时候就会找不到头节点;

3)pop的方法实现也有问题,因为是单向链,所以无法从末节点开始删除,只能删除头节点

4)top方法的意图未知

其他:

下面列举了一下我修改后的方案,做了一些锦上添花的操作,每个基本操作都会返回链表对象,这样就可以使用链式操作来写代码;迭代函数使用yield来实现,避免展开时占用不必要的内存。

另:我的展开时直接取链表中各个节点的元素,加了一些关键注释在代码中;

#-*-coding:utf-8-*-
classNode:
def__init__(self):
'''
elm:节点元素
nxt:下个节点指针
'''
self.elm,self.nxt=None,None

classSLinkedList:
def__init__(self):
'''
head:链表头
end_point:链表尾
'''
self.head=None
self.end_point=None

defpush(self,x):
p=Node()
p.elm=x
ifself.headisNone:
self.head=p
self.end_point=p
returnself
self.end_point.nxt=p
self.end_point=p
returnself

defpop(self):
'''因为实现的是一个单链表,所以只能从头开始删除节点'''
ifself.head.nxtisNone:
return
self.head=self.head.nxt
returnself

def__iter__(self):
temp_node=self.head
whiletemp_nodeisnotNone:
yieldtemp_node.elm
temp_node=temp_node.nxt


if__name__=='__main__':
'''增加1,2,5三个元素,并删除一个头节点'''
mylinklist=SLinkedList().push(1).push(2).push(5).pop()
print(list(mylinklist))


其实python这个语言使用链表有些画蛇添足,但是如果拿来当作需求练手也无妨。

望采纳,谢谢!

阅读全文

与python链表翻转相关的资料

热点内容
java代码快速 浏览:239
单片机左移右移后是补1还是0 浏览:595
湛江一号命令 浏览:333
导出命令行 浏览:274
C和php交互 浏览:600
苹果手机里的通讯录如何导入安卓手机 浏览:170
怎么在京东app里面看自己会员等级 浏览:43
emerson服务器怎么短接启动 浏览:559
工控编程人员工资 浏览:397
速成意大利语pdf 浏览:250
连续加减乘除法的算法 浏览:652
用mfc编程实现dda算法 浏览:42
linux命令打开应用 浏览:146
改造后的程序员 浏览:270
数控编程变量 浏览:785
江门哪里有plc编程系统 浏览:378
安卓手机如何下载外服b站 浏览:700
pythonetree库 浏览:759
数据插值算法 浏览:725
澳大利亚加密货币逃税 浏览:484