剑指 Offer 24. 反转链表

剑指 Offer 24. 反转链表

迭代

把当前节点的next设置为上一个节点,需要先存下来下一个节点,并且需要有个节点保存上一个节点

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

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;
        while (curr != null) {
            ListNode next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }
        return prev;
    }
}

 

 

递归

设置递归结束条件,head为空或head的下一个节点为空,将当前节点的下一个节点之后倒转得到新的头节点,将当前节点的下一个节点的指针指向当前节点。

当前节点的下一个节点置为空

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

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null || head.next==null)
        {
            return head;
        }
        ListNode newHead = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return newHead;
    }
}

 

 

 

posted @ 2021-11-10 09:58  渴望成为大佬的菜鸡  阅读(22)  评论(0)    收藏  举报