其他分享
首页 > 其他分享> > 单链表反转

单链表反转

作者:互联网

leetcode 206 https://leetcode-cn.com/problems/reverse-linked-list

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
 
示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:

输入:head = [1,2]
输出:[2,1]
示例 3:

输入:head = []
输出:[]

提示:

链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000

要反转链表,首先想到的是链表的头节点将会变尾节点,链表是通过指针将一个个节点连接起来的,那么可以选择改变指针指向,反转过程中,假设当前操作的节点为pNow,那么要改变当前节点指向的下一个节点,必须先记录下当前几点的下一个节点,不然改变指针后,导致下一个节点找不到,使得链表断链,所以还需要一个pNext指针,指向当前节点的下一个节点。另外,本来当前节点pNow的指针指向下一个节点,现在要反转,那就是要将当前节点的指针指向它的前一个节点,所以,也需要一个指针记录pPre前一个节点。

接下来分析操作步骤,首先当前要操作的节点从链表的头节点开始,先记录下一个节点,即pNext = pNow.next,接下来反转当前节点的指针指向前一个节点,即pNow.next = pPre,改变完指针后,记录当前节点的前一个节点,用来处理下一个节点的时候指向这个节点,即pPre = pNow,继续操作下一个节点,即pNow = pNext,操作结束的标志是当前链表已经到末尾了,也就是最后一个节点已经处理完了,即pNow == nil,然后返回pPre即为反转后链表的头节点。

在leetcode用go代码实现如下:
`/**

标签:单链,ListNode,反转,pNow,链表,pPre,节点,指针
来源: https://www.cnblogs.com/kks170716/p/15339803.html