Java实现单链表

本文通过Java代码展示了如何实现一个单链表数据结构,包括节点类Node和链表类LinkList。链表类包含了插入、删除、查找、修改、遍历等基本操作,并在测试代码中进行了实际应用,加深了对链表数据结构的理解。
摘要由CSDN通过智能技术生成

代码如下:

1、首先定义一个Node类,用于存放节点数据;

package code.LinearList;

public class Node<T> {
    T data;
    Node<T> next;

    public Node(Node<T> n){
        next = n;
    }

    public Node(T obj,Node<T> n){
        data = obj;
        next = n;
    }

    public T getData(){
        return data;
    }

    public Node<T> getNext(){
        return next;
    }
}

2、接着定义LinkList类

public class LinkList<T> {
    //头指针
    private Node<T> head;
    //单链表的长度
    private int length;
    //构造一个空的链表
    public LinkList(){
        length = 0;
        head = new Node<T>(null);
    }
    //获取链表头结点地址
    public Node<T> getHead(){
        return head;
    }
    //在链表中插入一个新元素
    public boolean add(T obj,int pos){
        if (pos < 1||pos > length+1){
            System.out.println("pos值不合法");
            return false;
        }
        int num = 1;
        Node<T> p = head,q = head.next;
        while (num<pos){
            p = q;
            q = q.next;
            num++;
        }
        p.next = new Node<T>(obj,q);
        length++;
        return true;
    }
    //删除链表中某个元素
    public T remove(int pos) {
        if (isEmpty()){
            System.out.println("链表为空表");
            return null;
        }else if (pos < 1||pos >length+1){
            System.out.println("pos值不合法");
            return null;
        }
        int num = 1;
        Node<T> p = head,q = head.next;
        while (num<pos){
            p = q;
            q = q.next;
            num++;
        }
        p.next = q.next;
        length--;
        return q.data;
    }
    //获取链表中一个元素
    public T value(int pos) {
        if (isEmpty()){
            System.out.println("链表为空表");
            return null;
        }else if (pos < 1||pos > length+1){
            System.out.println("pos值不合法");
        }
        int num = 1;
        Node<T> q = head.next;
        while (num<pos){
            q = q.next;
            num++;
        }
        return q.data;
    }
    //在链表查找一个元素
    public int find(T obj){
        if (isEmpty()){
            System.out.println("链表为空表");
            return -1;
        }
        int num = 1;
        Node<T> p = head.next;
        while (p != null){
            if (p.data.equals(obj) == false){
                p = p.next;
                num++;
            }else
                break;
        }
        if (p == null){
            return -1;
        }
        return num;
    }
    //更新链表中某个元素
    public boolean modify(T obj,int pos){
        if (isEmpty()){
            System.out.println("链表为空表");
            return false;
        }else if (pos < 1||pos > length+1){
            System.out.println("pos值不合法");
        }
        int num = 1;
        Node<T> q = head.next;
        while (num<pos){
            q = q.next;
            num++;
        }
        q.data = obj;
        return true;
    }
    //判空
    public boolean isEmpty(){
        return length==0;
    }
    //求链表中数据元素的个数
    public int size( ){
        return length;
    }
    //依次访问链表中每个元素并输出
    public void nextOrder( ){
        Node<T> p = head.next;
        while (p != null){
            System.out.println(p.data);
            p = p.next;
        }
    }
    //销毁一个已经存在的链表
    public void clear(){
        length = 0;
    }
}

测试代码如下:

public class testLinkList {
    public static void main(String[] args) {
        LinkList<Integer> L=new LinkList<>();
        int i;
        int a[]={23,56,12,49,35};
        for(i=0;i<a.length;i++)
            L.add(a[i], i+1);   //将数组中各元素插入到单链表中
        System.out.println("单链表中的数据元素为:");
        L.nextOrder();
        L.add(30, 4);
        System.out.println("执行插入操作后单链表中的数据元素为:");
        L.nextOrder();
        L.remove(5);
        System.out.println("执行删除操作后单链表中的数据元素为:");
        L.nextOrder();
        i=L.find(12);        //在单链表L中查找元素12的位序
        System.out.println("元素12在单链表中的位序为:"+i);
    }

}

通过对单链表的实现,我进一步加深了对该数据结构的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值