原题
输入[1,2,3,4,5]
输出[5,4,3,2,1]
解答
思路:
1->2->3->-4>-5->null
先定义个前驱指针,指向null,prev = None
再定义一个当前指针,指向当前函数传入的值,也就是head,curr = head
循环遍历链表,遍历链表都是从当前节点开始的,这里的遍历只能用while,不能用for,因为你不知道长度
循环体内:
先用tmp 记录当前节点的下一个节点,tmp = curr.next
再把当前节点的下一个节点指向前驱节点,curr.next = prev
前驱节点指向当前节点,prev = curr,其实这2步目的是将前驱节点后移
再将当前节点后往后移动一个,也就是指向了下一个节点,目的是,下一次遍历从这个节点开始,curr = tmp
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseList(self, head: ListNode) -> ListNode: prev = None curr = head while curr: tmp = curr.next curr.next = prev prev = curr curr = tmp return prev
记忆方式
我的记忆方式很简单,只记忆循环体的内容,其他的硬记了。
循环体分为4步,先记第一步和第四部。也就是用tmp 记录下当前节点的下一个节点,再将当前节点指向下一个节点
tmp = curr.next
xxx
xxx
curr = tmp
再记中间2步,中间的步骤目的是将前驱节点指向当前节点,也就是先将当前节点的下一个节点指向前驱节点,再把前驱节点指向当前节点。互相指向对方
curr.next = pre
pre = curr
原创文章,作者:站长,如若转载,请注明出处:https://wsppx.cn/865/%e7%bd%91%e7%bb%9c%e5%bc%80%e5%8f%91/
评论列表(1条)
去面试迅雷就问了这个题目,真实日狗了,2周就忘记了。。