[LeetCode][简单][链表] 206 反转链表

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

解题思路

方法一:迭代法

1.迭代需要三个指针,pre,cur,nxt,分别按顺序指向三个节点
2.三个指针的初始化:pre指向空节点,cur指向头结点head,nxt指向head.next
3.迭代过程:nxt指向cur.next、cur.next指向pre、pre移动到cur位置、cur移动到nxt位置
4.当cur为空时,返回pre

代码

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        pre, cur = None, head
        while cur:
            nxt = cur.next
            cur.next = pre
            pre = cur
            cur = nxt
        return pre

时间复杂度:O(n)
空间复杂度:O(1)

方法二:递归法

1.递归上来就先写终止条件:如果head为空或者head.next为空,返回head
2.新头结点newHead指向尾结点,此处进入递归,递归一直遍历到尾节点时才会返回
3.每一层递归,该层递归中的head会让下一个节点指向自己,head.next.next=head;然后head自己指向空。以此达到反转的目的
4.返回新链表的头结点newHead

代码

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        newHead = self.reverseList(head.next)
        head.next.next = head
        head.next = None
        return newHead

时间复杂度:O(n)
空间复杂度:O(n)

你可能感兴趣的:([LeetCode][简单][链表] 206 反转链表)