美文网首页
206. 反转链表

206. 反转链表

作者: 衣锦昼行 | 来源:发表于2019-08-07 15:29 被阅读0次

    在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。不要忘记在最后返回新的头引用!

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode reverseList(ListNode head) {
            ListNode pre = null;
            ListNode next = null;
            while(head!=null){
                next = head.next;
                head.next = pre;
                pre = head;
                head = next;
            }
            return pre;
        }
    }
    

    复杂度分析
    时间复杂度:O(n),假设 n 是列表的长度,时间复杂度是 O(n)。
    空间复杂度:O(1)。

    递归,来自官方题解

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

    时间复杂度:O(n),假设 n 是列表的长度,那么时间复杂度为 O(n)。
    空间复杂度:O(n),由于使用递归,将会使用隐式栈空间。递归深度可能会达到 n 层。

    相关文章

      网友评论

          本文标题:206. 反转链表

          本文链接:https://www.haomeiwen.com/subject/banodctx.html