单链表(Java实现)

//LinkedList.java
public class LinkedList {
    @Test //测试结点类
    public void test1() {
        Node<Character> root = new Node<>('a');
        Node<Character> n2 = new Node<>('b');
        Node<Character> n3 = new Node<>('c');

        root.setNext(n2);
        n2.setNext(n3);
        n3.setNext(null);

        Node<Character> current = root;
        while (current != null){
            System.out.print(current.getData() + " ");
            current = current.getNext();
        }
    }

    @Test //测试链表类
    public void test2(){
        Link<String> link = new Link<>("");
        link.addLast("ClearLove");
        link.addLast("Kid");
        link.addLast("Uzi");
        link.print();

        link.add(3, "ZziTai");
        link.print();

        link.pop(4);
        link.print();

        System.out.println("第一个结点值是:" + link.get(1));
        System.out.println("Kid是第" + link.get("Kid") + "个结点");
    }
}

//结点类
class Node<T>{
    private T data; //结点值
    private Node<T> next; //当前结点的下一个结点

    public Node(T data){ //初始化结点时必须赋初值
        this.data = data;
    }

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

    public void setNext(Node<T> next) { //设置指向的下一个结点
        this.next = next;
    }

    public T getData() { //获取当前结点值
        return data;
    }
}

//链表类
class Link<T>{
    private Node<T> root; //头结点
    private Node<T> rear; //尾指针
    public int length; //链表长度

    public Link(T t){
        root = new Node<>(t);
        root.setNext(null);
        rear = root;
        length = 0;
    }

    //遍历单链表
    void print(){
        Node<T> current = root.getNext();
        while (current != null){
            System.out.print(current.getData() + "->");
            current = current.getNext();
        }
        System.out.println("null");
    }

    //尾插法
    void addLast(T t){
        Node<T> n = new Node<>(t);
        n.setNext(rear.getNext());
        rear.setNext(n);
        rear = n;
        ++length;
    }

    //任意位置插入
    //index:第几个结点
    boolean add(int index, T t){
        if (index < 1 || index > length + 1) return false;
        Node<T> current = root;
        for (int i = 1; i < index; i++)
            current = current.getNext();
        Node<T> n = new Node<>(t);
        n.setNext(current.getNext());
        current.setNext(n);
        ++length;
        return true;
    }

    //任意位置删除
    //index:第几个结点
    boolean pop(int index){
        if (index < 1 || index > length) return false;
        Node<T> current = root;
        for (int i = 1; i < index; i++)
            current = current.getNext();
        current.setNext(current.getNext().getNext());
        --length;
        return true;
    }

    //查找
    //index:第几个结点
    T get(int index){
        if (index < 1 || index > length){
            System.out.println("这个位置没有结点");
            System.exit(index);
        }
        Node<T> current = root;
        for (int i = 1; i <= index; i++)
            current = current.getNext();
        return current.getData();
    }

    //定位第一个结点值为t的结点
    int get(T t){
        Node<T> current = root.getNext();
        for (int i = 1; i <= length; i++) {
            if (current.getData().equals(t))
                return i;
            current = current.getNext();
        }
        return -1;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值