1.题目描述
2.难度-简单
3.思路
1)暴力法
第1轮循环:链表第1个结点和第2至n个结点依次交换位置,使第1个结点成为最后一个结点。
第2轮循环:链表第1个结点和第2至n-1个结点依次交换位置,使第1个结点(链表原第2个结点)成为第n-1个结点。
以此类推,可将链表反转。
时间复杂度:O(n^2)
空间复杂度:O(1)
2)递归法
①递归过程
反转除第一个结点之外的所有结点并得到新的头结点;将第一个结点的下一个结点的下一个结点设置为第一个结点(由第一个结点指向第二个结点转变为第二个结点指向第一个结点);将第一个结点的下一个结点设置为NULL。
②递归终止条件
若head结点的下一个结点为NULL或head为NULL,结束递归。
3)迭代法
遍历链表,将当前结点指向下一个结点改为当前结点指向上一个结点。
时间复杂度:O(n)
空间复杂度:O(1)
4.python代码
递归法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if head == None or head.next == None:
return head
newHead = self.reverseList(head.next)
head.next.next = head
head.next = None
return newHead
5.参考资料