ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

leetcode系列:反转链表的形象表示

2026/9/16 17:26:45 拓冰建站 浏览量
leetcode系列:反转链表的形象表示

反转链表是一道比较简单的题,主要考察的是对链表数据结构的理解和双指针应用,比较容易出错的地方是指针的移动顺序。在练习的过程中想到了一个比较形象的表示方法,于是记录下来。

# 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: Optional[ListNode]) -> Optional[ListNode]:pre = Nonecur = head while cur:tmp = cur.next cur.next = prepre = curcur = tmpreturn pre

1. 首先pre的定义是建立在对链表的理解上的,最终链表的head因为没有next节点,所以就是None。这个pre既是在后面表示前一个节点,又是在初始化时表示了反转后链表的尾部,这样就能理解为什么要定义pre。

2. cur表示当前节点,之后的while循环也是建立在cur上的,当cur为none了,表示这个链表遍历到尾部了。

3. tmp = cur.next和cur.next = pre这两句可以按照下面的图片理解:

        本来A->cur->C是一个链表,如第一行;

        tmp = cur.next其实相当于把cur->C的链接砍断,把C先存到别的地方去,如第二行;

        cur.next = pre相当于把A->cur的链接砍断后添加了一个反向的链接,如第三行和第四行;

        这两个操作后实现了cur->A,那么接下来的步骤就是该把C->cur了。

4. pre = cur和cur = tmp就是在把指针向后移,重复上面3的步骤,把C->cur。注意:在这个操作后pre就指向了cur,cur已经指向tmp,所以最后return的是pre而不是cur。