反转列表用python写的话很简单,但是总感觉不是很好理解,画图来一遍,加深理解 ~(小菜鸟的悲伤)
示例:
输入: 1->2->3->4->NULL
输出: 4->3->2->1->NULL
(ps: 画图技术不行,将就看看,不要嫌弃我呀~)
初始链表长这样:
先定义一个空指针pre = None,干嘛呢?对,没错,就是让他记住前面断开的节点,万一丢了咋整?
next始终指向下一个要反转的节点,详细看图解~
反转第一个节点:next = head.next(next指向第二个节点,即节点2)
head.next = pre(将第一个节点和第二个节点断开,指向空,即反转后的最后一个节点)
pre = head(让之前定义的那个空指针指向断开的节点1,先记住他,这样保证不会丢了节点)
head = next(让head也指向2节点),如图:
到这里可以看到节点1 和节点2 已经断开,且节点1 指向空,为反转后的最后一个节点没错吧?
继续,我们再来一次就看清楚了,反转第二个节点2
反转第二个节点:
next = head.next(head目前指向第二个节点,即节点2,所以此时next指向节点3)
head.next = pre(将第二个节点和第三个节点断开,且节点2指向节点1)
然后继续
pre = head(pre 指向节点2 ,这样Head就可以放心的移向下一个节点)
head = next(Head指向3)
到这里,第二个节点也反转完成,后面的就一样的,不赘述啦~
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
pre = None
while head:
next = head.next
head.next = pre
pre = head
head = next
return pre
有问题欢迎留言~