打败算法 —— 反转链表
本文参考
出自LeetCode上的题库 —— 反转链表,该题比较简单,但是反转的思想会在很多场景中出现,因此记录一下
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 = []
输出:[]
解题思路
只需要增加一个指针记录前一个结点的信息就能够实现反转,官方题解还提供了递归的解法,类似于之前"排序列表"的递归解法。不过用递归的思想反而使解题过程变得复杂,本文只记录循环解法
循环解法
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
pre = None
while head:
tmp = head.next
head.next = pre
pre = head
head = tmp
return pre