【力扣刷题】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)

#输出:
#<class 'NoneType'>
#None

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

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

知识3:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值