1、单链表的实现(java代码)

1、创建链结构实体Node

/**
 * 链表结构实体类
 */
public class Node {
    Node next = null; //下一节点
    int data;         //节点数据

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


2、链表的操作(链表的头结点创建、增加元素,删除元素、求链表长度、根据输入数据求下标)

/**
 * 链表功能实现
 */
public class Linked_List {

    Node head = null;    //链表头结点

    /**
     * 1、求链表长度:以备后续用
     * 思路:遍历一个节点,记录长度加一(注意:初始长度给0)
     *
     * @return int:返回长度
     */
    public int get_length() {
        int list_length = 0;
        Node cur_node;
        cur_node = head;
        while (cur_node != null) {
            list_length++;
            cur_node = cur_node.next;
        }
        return list_length;
    }

    /**
     * 2、添加
     * 思路:找到链表的末尾节点,把新的数据节点添加在后面
     *
     * @param date :插入的数据
     */
    public void add_Node(int date) {
        Node newnode = new Node(date);
        if (head == null) {     //判断是否只有一个头结点
            head = newnode;
            return;
        } else {
            Node temp = head;
            while (temp.next != null) {  //不为头节点,找到最后一个节点
                temp = temp.next;
            }
            temp.next = newnode;
        }
    }

    /**
     * 3、删除
     * 思路:传入下标,根据下标,找到相应的节点,删除节点的前一节点指向删除节点下一节点
     *
     * @param index:删除的数据的下标
     * @return
     */
    public boolean delete_Node(int index) {
        if (index < 1 || index > get_length()) {
            System.out.println("你所要删除的元素下标输入有问题");
            return false;
        }
        if (index == 1) {
            head = head.next;
            return true;
        }
        Node pre_node = head;
        Node cur_node = pre_node.next;
        int i = 2;
        while (pre_node != null) {
            if (i == index) {
                pre_node.next = cur_node.next;
                return true;
            } else {
                pre_node = pre_node.next;
                cur_node = cur_node.next;
                i++;
            }
        }
        return true;
    }

    /**
     * 4、根据输入数据求下标
     * @param data:输入的数据
     * @return int:返回输入数据下标
     */
    public int get_data(int data) {
        Node node = head;
        int index = 0;
        while (node != null){
            if (node.data == data){
                return index;
            }
            node = node.next;
            index++;
        }
        return -1;
    }
    /**
     * 5、打印显示输出
     */
    public void print_linklist() {
        Node node = head;
        while (node != null) {
            System.out.print(node.data + " ");
            node = node.next;
        }
        System.out.println();
    }

    public static void main(String[] args) {
        
        //1、创建链表
        Linked_List linked_list = new Linked_List();
        //2、添加链表元素
        linked_list.add_Node(4);
        linked_list.add_Node(8);
        linked_list.add_Node(7);
        linked_list.add_Node(1);
        //3、打印添加的元素
        linked_list.print_linklist();
        //4、删除下标元素
        linked_list.delete_Node(4);
        linked_list.print_linklist();
        
        //5、获取链表长度
        System.out.println("链表长度 "+ linked_list.get_length());
       
        int index = linked_list.get_data(1);
        
        if (index == -1){
            System.out.println("你要查找的数据不存在");
        }else{
            System.out.println("你要查找的数据元素下标 " + index);
        }
    }
}


3、实现结果小测试

 

4 8 7 1 
4 8 7 
链表长度 3     (1被删除,长度减一)
你要查找的数据不存在   (由于1已被删除,所有在main中求1的下标不在)

 

posted @ 2019-05-17 15:29  编程小白1024  阅读(4604)  评论(0编辑  收藏  举报