Java 链表之头插法和尾插法区别

咱啥话也不多说,直接上代码!

package linkedNode;

import java.util.Scanner;

/**
 * 链表相关练习
 */
public class LinkedNode {
    public static class ListNode {
        int value = 0;
        ListNode next = null;

        public ListNode() {
        }

        public ListNode(int value, ListNode next) {
            this.value = value;
            this.next = next;
        }
    }

    public static void main(String[] args) {

    }

    /**
     * 一般设计最近使用之类的功能时用头插法去做
     * 1.插入速度快。每次都只要插在头节点
     * 2.数据按插入顺序倒叙排列,遍历时时按照插入倒序输出
     * 3.头节点永远在变化,需要维护一个头节点
     */
    public static void insertBeforeHead() {
        Scanner sc = new Scanner(System.in);
        int num = 10;
        ListNode header = null;
        while (num-- > 0) {

            int value = sc.nextInt();

            ListNode node = new ListNode(value, header);

            header = node;
        }
    }

    public static ListNode findByHeadInsert(ListNode node, int value){
        if(node == null) return null;
        if(node.value == value)
            return node;
        else
            return findByHeadInsert(node.next, value);
    }

    /**
     * 1.插入速度慢。每次插入都要遍历整个链表
     * 2.遍历时按照插入正序输出
     * 3.头节点永远不变。不需要维护头节点的引用
     */
    public static void insertAfterTail() {
        Scanner sc = new Scanner(System.in);
        int num = 10;
        ListNode header = new ListNode();
        while (num-- > 0) {
            int value = sc.nextInt();
            ListNode node = new ListNode(value, null);
            header.next = node;
            header = node;
        }
    }

    public static ListNode findByTailInserr(ListNode node, int value){
        if(node == null) return null;
        if(node.value == value)
            return node;
        else
            return findByTailInserr(node.next, node.value);
    }
}

头插法特点:

        1.插入速度快,每次都是插在头部节点。

        2.遍历时按照插入时倒叙输出

        3.需要维护一个头节点,每次插入进去后就将插入节点引用赋给头节点

尾插法优缺点:

        1.插入速度慢,每次插入需要遍历整个链表

        2.遍历时按照插入顺序输出

        3.头节点永远不变,不需要维护头节点引用。

头插法适合做如网站的最近使用功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值