链表的头插法和尾插法

链表是一种非常常见的数据结构,是必须掌握的

链表每一个节点在内存中分布并不是线性的是随机的,是通过数据结构中的next将下一节点与当前节点产生联系,进而连成一个串的,类似下图

菱形代表所存位置的内存值,方块代表每一个链表节点

public class ListNode {
    public int val;//当前节点的值
    public ListNode next;//记录下一节点
    //下面三个函数是java的构造函数,方便快速赋值
    public ListNode(){}
    public ListNode(int val){ this.val = val; }
    public ListNode(int val,ListNode next){this.val = val;this.next = next;}
    @Override
    public String toString() {//重写了一个输出方法,方便看
        return "ListNode{" +
                "val=" + val +
                ", next=" + next +
                '}';
    }
}

头插法:

 

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        //头插法
        ListNode l1 = new ListNode(arr[0]);
        for (int i = 1; i <arr.length ; i++) {
            ListNode no = new ListNode(arr[i]);//产生一个新的节点
            no.next = l1;//新节点的next指向链表的头
            l1 = no;//更新链表的头
        }
}

尾插法:

 

public static void main(String[] args) {
        //尾插法,头要返回不能动,所以用tail来移动
        int[] arr2 = {1,2,3,4,5};
        ListNode head=null,tail=null;//定义两个指针
        for (int i = 0; i < arr2.length; i++) {
            ListNode no = new ListNode(arr[i]);//产生一个新节点
            if(head==null){
                head= no;
                tail = head;
            }else {
                tail.next = no;//链表尾节点的next指向新的no
                tail = tail.next;更新尾节点
            }
        }
        System.out.println(head);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值