假如说这是我们的链表,结构如下图所示:

第一步:定义3个指针变量,pre(序节点)、cur(当前操作的节点)和nxt(当前操作的下一个节点),结构如下图所示:

第二步:通过更改刚刚定义的3个指针变量反转链表节点。

  • 更改pre的指针域(next)指向:

  • 更改cur的指针域(next)指向:首先更改cur的指针域(next)指向,让它指向pre;之后再移动pre到cur除,最后移动cur到nxt处。这时,已经完成了链表的第一个和第二节点的反转。

第三步:重复第二步的操作,直到链表的所有节点反转完成。

如果cur指针变量指向的节点为Null时,就说明所有节点都完成了反转,循环退出,因此反转链表循环的条件:cur!=NUll。

最后返回反转之后的头结点,头结点就是pre所指向的内容。

如果文字描述的不太清楚,你可以参考视频的详细讲解:B站 @好易学数据结构

class Solution:
    def ReverseList(self , pHead: ListNode) -> ListNode:
        if pHead is None:
            return pHead  # 节点为空,直接返回
        pre = None  # (操作的)前序节点
        cur = pHead  # (操作的)当前节点
        nxt = pHead  # (操作的)下一个节点
        while cur is not None:
            nxt = cur.next  # 移动nxt指针
            cur.next = pre  # 更改当前节点(cur)指针域的指向
            pre = cur  # 移动pre指针
            cur = nxt  # 移动cur指针
        return pre  # 返回反转之后的头结点

如果上面的代码理解的不是很清楚,你可以参考视频的详细讲解:B站 @好易学数据结构