Java|单向链表的实现

package testOffer.linkedList;

import org.w3c.dom.Node;

public class SingleLinkedList {

    //测试用例
    public static void main(String[] args) {
        SingleLinkedList singleLinkedList = new SingleLinkedList();
        singleLinkedList.addHead("A");
        singleLinkedList.addHead("B");
        singleLinkedList.display();
    }
    
    
    /********实现代码**********/

    private int size; //链表节点的个数
    private Node head; //头节点

    public SingleLinkedList(){
        size = 0;
        head = null;
    }

    //链表的每个节点类
    private class Node{
        private Object data; //每个节点的数据
        private Node next; //每个节点指向下一个节点的连接

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

    //在链表头添加元素
    private Object addHead(Object obj){
        Node newHead = new Node(obj);
        if (size == 0){
            head = newHead;
        }else {
            newHead.next = head;
            head = newHead;
        }
        size++;
        return obj;
    }

    //在链表头删除元素
    private Object deleteHead(){
        Object obj = head.data;
        head = head.next;
        size--;
        return obj;
    }

    //查找指定元素,找到了返回节点Node,找不到返回null
    public Node find(Object obj){
        Node current = head;
        int tempSize = size;
        while(tempSize > 0){
            if (obj.equals(current.data)){
                return current;
            }else {
                current = current.next;
            }
            tempSize--;
        }
        return null;
    }

    //删除指定元素,删除成功返回true
    public boolean delete(Object value){
        if (size == 0)  return false;
        Node current = head;
        Node previous = head;
        while(current.data!=value){
            if (current.next == null ) return false;
            else {
                previous = current;
                current = current.next;
            }
        }

        //如果删除的节点是第一个节点
        if (current == head ){
            head = current.next;
            size--;
        }else {
            //删除的不是第一个
            previous.next = current.next;
            size--;
        }
        return true;
    }

    //判断链表是否为空
    public boolean isEmpty(){
        return (size==0);
    }

    //显示节点信息
    public void display(){
        if (size>0){
            Node node = head;
            int tempSize = size;
            if (tempSize==1){
                System.out.print("["+node.data+"]");
                return;
            }
            while(tempSize>0){
                if (node.equals(head)){
                    System.out.print("["+node.data+"->");
                }else if (node.next == null){
                    System.out.print(node.data+"]");
                }else {
                    System.out.print(node.data+"->");
                }
                node = node.next;
                tempSize--;
            }
            System.out.println();
        }else {
            System.out.println("[]");
        }
    }
}

 

posted @ 2019-04-03 10:29  Tiger_Jiang  阅读(339)  评论(0编辑  收藏  举报