java实现单链表

本文介绍了一种单链表的数据结构实现方式,并提供了完整的Java代码示例。通过创建Node类来表示链表节点,以及SingleLinkedList类来实现链表的基本操作,如插入、删除和查找等。

单链表的概念参照这个完全可以理解http://baike.baidu.com/link?url=-1uzZ37pcZwpN-1Zy2lCassJ2YqPQzjIPbQHdPXCwo0pGR5-sXiEY8kXNUjt2DubG_8JTSQBJrhTF182Kwo5Wq

下面是我的程序:

新建一个名为Node的类,data是数据域,而next是指针域

package singleLinkedList;

/**
 * Created by lzh on 2/29/16.
 */
public class Node {
    public Node next;
    public Object data;

//    public Node(){}
    public Node(Object data){
        this.data = data;
    }
}

在写一个

package singleLinkedList;

/**
 * Created by lzh on 2/29/16.
 */
public class SingleLinkedList extends RuntimeException{
    private Node first;
    private int length;
    public SingleLinkedList(){
        init();
    }
    /**
     * initialize SingleLinkedList
     */
    private void init(){
        this.first = null;
    }

    /**
     *
     * @param data insert data
     * @param locate insert location
     */
    public void insert(Object data,int locate){
        if(locate < 0){
            throw new RuntimeException("please input valid locate");
        }else if(locate == 0){
            insert(data);
        }else {
            add(data,locate);
        }
    }

    private void add(Object data,int locate){
        Node newNode = new Node(data);
        Node curr = first;
        int currLocate = 1;
        while(curr.next != null){
            if(currLocate == locate){
                newNode.next = curr.next;
                curr.next = newNode;
                length++;
                currLocate++;
            }else{
                curr = curr.next;
                currLocate++;
            }
        }
        if(currLocate == locate){
            curr.next = newNode;
            length++;
            currLocate++;
        }else if(currLocate< locate){
            throw new RuntimeException("locate is out if size");
        }
    }

    /**
     *
     * @param data insert data,default insert into first location of the SingleLinkList
     */
    public void insert(Object data){
        Node insert = new Node(data);
        insert.next = first;
        first = insert;
        length++;
    }

    /**
     *
     * @param data remove data of the SingleLinkedList
     * @return remove data
     */
    public Object remove(Object data){
        Node curr = first;
        boolean flag = false;
        if((curr.data).equals(data)){
            first = curr.next;
            length--;
            flag = true;
        }
        while(curr.next != null){
            if((curr.next.data).equals(data)){
                if(curr.next.next != null){
                    curr.next = curr.next.next;
                    length--;
                }else{
                    curr.next = null;
                }

                flag = true;
            }
            curr = curr.next;
        }
        return flag;
    }

    /**
     *
     * @param data find data in the SingleLinkedList
     * @return
     */
    public boolean find(Object data){
        Node curr = first;
        while(curr != null){
            if((curr.data).equals(data)){
                return true;
            }else{
                curr = curr.next;
            }
        }
        return false;
    }

    /**
     *
     * @return the length of the SingleLinkedList
     */
    public int size(){
        return length;
    }

    public void listAll(){
        Node curr = first;
        if(curr == null){
            System.out.println("this SingleLinkedList is empty");
        }else{
            while(curr != null){
                System.out.println(curr.data);
                curr = curr.next;
            }
        }
    }

    public boolean isEmpty(){
        if(first == null){
            return true;
        }else {
            return false;
        }
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值