Leetcode 206 反转链表
题目描述:
给定一个链表1->2->3->4->5,要求反转成5->4->3->2->1
思路:
我第一反应是递归,因为使用迭代的话感觉会很困难,但是递归的话就很轻松,直接层层递归下去,最后处理一个两节点的反转问题就行了;
解法一:(使用递归)
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if head is None or head.next is None:
return head
new_head = self.reverseList(head.next)
head.next.next = head
head.next = None
return new_head
递归的 思路:
先把问题化简到只处理两个节点的问题,然后最关键的步骤是将head.next.next = head,并且head.next = None
之后return new_head就把这个任务完成了,简简单单~
解法二(迭代法):
迭代法就有些难度了。
我首先有了这样一种想法,就是对于每两个挨着的节点a->b
直接把b的next指向a不就完事了,然后再把这两个节点移到后面两个节点上。
但是后面c已经和b失去联系了!所以这方法好像不太行,但是又一想,加一个临时变量记录下来不就完事了,所以开干!
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
prev=None
curr=head
while curr:
nex=curr.next
curr.next = prev
prev= curr
curr= nex
return prev
这里小伙伴可能会想:在C语言中,这节点是要定义的啊,咋在这python里就不是需要定义的了?
不好意思,python就是这么牛逼,直接等于就行,面向对象的编程就是这么轻松容易。
好了,今天的题就到此为止咯,希望我能坚持下来,为大家找工作奠定一个轻松的路。