反转链表
难度 简单
题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例1
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例2
输入:head = [1,2]
输出:[2,1]
示例3
输入:head = []
输出:[]
解题思路
链表反转,可将链表元素依次从首部拿下来,然后在一个新链表中依次从头部插入
- 一开始就判断head是否为空,若为空则直接返回
- 定义一个指针p指向head,用来从链表头部取元素
- 定义一个元素为空的新链表头指针head_r
- 当head不为空时
- p指向head
- 指针head向后移
- 让p的next指向head_r,即指向空
- head_r指向p,即指向的是从链表头部取的元素
- 退出循环,则head为空,链表遍历完成,返回head_r即为反转后的链表
代码
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None:
return
head_r = None
while head:
# 取链表头部元素
p = head
head = head.next
# 在新链表中从头部插入所取元素
p.next = head_r
head_r = p
return head_r
至此,此题解答完毕
总结
此题要注意指针head的移动问题,要先移head指针,再将元素插入新的链表。若先插链表最后移head,则head.next为空了,因为p.next为空,p和head开始都指的同一个地址,改了p.next为空,则head.next也为空。