美文网首页
算法-Linked List链表题型

算法-Linked List链表题型

作者: 码农朱同学 | 来源:发表于2022-08-08 16:41 被阅读0次

    Linked List vs Array

    Array, 一组内存里的连续数据

    • 能用index访问-->O(1)
    • 添加元素直接添加到最后--> O(1) 要考虑到扩容
    • 删除元素要挪动后面所有元素位置--> O(n)

    Linked List -- 内存中不一定连续

    • 不能用index访问 —> O(n)
    • 添加元素添加在最好--> O(n)
    • 删除需要找到元素位置--> O(n)
    public class ListNode {
        public int val;
        public ListNode next;
    
        public boolean hasNext() {
            return next != null;
        }
        public ListNode(int x) {
            val = x;
            next = null;
        }
        //以下为静态方法
        public static void printNode(ListNode head) {
            System.out.print("->" + head.val);
            if (head.hasNext()) {
                printNode(head.next);
            } else {
                System.out.print("\n");
            }
        }
    
        public static ListNode buildNode(int[] values) {
            if (values.length == 0) {
                return null;
            }
            ListNode[] nodes = new ListNode[values.length];
            for (int i = 0; i < values.length; i++) {
                nodes[i] = new ListNode(values[i]);
            }
            for (int i = 0; i < values.length - 1; i++) {
                nodes[i].next = nodes[i + 1];
            }
            return nodes[0];
        }
    }
    
    

    一般常用双指针方法

    • 两个指针指向Linked List节点,不再是index
    • 两个指针必定同向而行
    1. 一个快一个慢,距离隔开多少
    2. 两个指针移动速度

    eg. Linked List找中间节点
    两个指针同向而行,一个每次前进2个节点,另一个每次前进1个节点,当快的指针到最后,慢的指针就停留在了中点。

    eg. Linked List 找倒数第k个节点
    两个指针先隔开k个位置,然后每次相同速度向前进知道快指针出界,慢指针就停留在倒数第k个节点。

    递归

    第一步和第三步的含义必须相同。
    1,寻求子问题解
    2,这一层的递归要做什么
    3,返回结果

    如翻转链表

        public ListNode reverse(ListNode head) {
            if (head == null || head.next == null) {
                return head;
            }
            ListNode reverseHead = reverse(head.next);
            head.next.next = head;
            head.next = null;
            return reverseHead;
        }
    

    相关文章

      网友评论

          本文标题:算法-Linked List链表题型

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