栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【力扣刷题】206. 反转链表 (简单,我难)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【力扣刷题】206. 反转链表 (简单,我难)

题目:

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

解题思路:

首先生成一个空列表ar,遍历链表的同时,存入该列表ar,同时指针后移;遍历完后,ar已正序包含链表所有元素,再一次使用list.pop()函数,使每个元素从尾部一个个肆放装进新的列表pr,此时pr则与链表元素顺序反过来。

解决方案(python)

#迭代法
prev=None
cur=head
while(cur!=None):
    next=cur.next   #用来保存cur指针(保证cur能正常向后移)
    cur.next=prev    #将cur指向前一个元素(保证最后cur指向空时,pre能往前元素走)
    prev=cur         #pre往后移动一个元素
    cur=next        #cur向后移动一个元素
return prev

解法二:递归法

思路2:

判断如果head或head.next为None时,返回head

一直往后递:即p=self.reverseList(head.next),直到递到head为最后一个元素时,head.next满足判断则返回最后一个元素,将head.next指向head(即head.next.next=head),即可将元素往前归,归完一个元素但也需要将head.next=None,使得元素往前归的同时,保证下一个元素为空,才能正常返回元素。

if (head is None) or (head.next is None):
    return head
p=self.reverseList(head.next)
head.next.next=head      #表示将head.next的指针指向head,让head位置往前一个元素移动
head.next=None           #保证head往前移动过程中,后面一个元素为None,才能满足上面的判断句
return p

知识点:

知识1:python中只有None,没有Null

判断语句if (head is None)or (head.next is None)才是正确的,None属于一个空类型,不是布尔型。不能使用if(head)

print(type(None))
print(None)

#输出:
#
#None

知识2:head.next.next=head     #表示将head.next的指针指向head

该题中当前一次递归(此时递归head.next为最后一个元素)完成后,第一轮让head.next.next=head,下一个递归函数括号中的head.next即为倒数第二个元素。才符合逻辑

知识3:

p=self.reverseList(head.next)    递归函数使用方法

此处应该是self.函数名;这个需要根据上面给出的参数名来看。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864100.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号