题目
题目描述
输入一个链表,反转链表后,输出新链表的表头节点。
示例1
输入
[1,2,3]
返回值
[3,2,1]
一、思路
【思路】
设置pre、mid、last指针,分别代表前面节点、中间节点、和待记录的节点(后节点);
- pre:记录指针反转时要指向的节点
- mid:记录要改变指针指向的节点
- last:mid改变指向前,记录mid的next节点,防止后面找不到mid的下一个节点
【边界情况】
- 链表为空
- 链表只有一个节点
二、代码
# -*- coding:utf-8 -*-
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
if not pHead or not pHead.next:
return pHead
pre=pHead
mid=pre.next
while mid:
last=mid.next
mid.next=pre
pre=mid
mid=last
pHead.next=None
return pre
三、总结
这道考题,一定要注意保留pHead,并最终将其next指向空None,否则,开始时的头节点和下一个节点会形成互指的情况,这时候遍历反转后的链表,就会形成死循环。