数据结构与算法:Java单链表

首先我们要知道,在Java中是没有指针的概念的
而Java虽然没有指针,但有着引用
利用引用一样可以制造链表

class Node{
Node next=null;//节点被创建的同时创建对象引用,但没申请对象空间
int data;
public Node(int n)data=n;
}

每一个结点都有一个对象引用,这使得链表在逻辑上是连续的,不用考虑物理顺序
通常情况下,链表有一个head,用来标识链表的起始位置,head并不作为链表的结点,head只是一个引用,head的引用对象是链表的第一个结点。
如:head.data==第一个结点.data;
我们接下来创建链表类,链表由结点构成

class LinkList{
    Node head=null;//每个链表都有头结点
    public void addNode(int e){
//给链表增加结点的方法,这里只示例尾部结点添加,其他插入也大同小异
        Node n=new Node(e);
        Node tmp=head;//head引用不能动,因为head标识链表的起始位置,申请一个tmp引用来进行操作
        if(head==null){head=n;return;}//若链表为空,则直接添加在第一个结点
        while(tmp.next!=null){
            tmp=tmp.next;//将tmp引用向后移,一直移到最后一个结点
        }
        tmp.next=n;//在最后一个结点后添加新结点
    }
    public void delNode(int n){
        //删除指定位置的结点,第一个结点是head指向的结点
        Node pre=head;
        if(n==1){head=head.next;return;}//
        int num=2;
        while(num<n){
            pre=pre.next;//pre指向被删除的前一个结点
            num++;
        }
        pre.next=pre.next.next;//删除结点
    }
    public void print(){//输出链表
        Node tmp=head;
        if(tmp==null){System.out.print("null");return;}
        do{
        System.out.print(tmp.data+" ");
        tmp=tmp.next;}while(tmp.next!=null);
    }
}

链表操作关键在于两处
1:head始终代表链表的起始位置
2:如果当前引用的结点为空,则空结点不能有下一个结点,否则会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值