自己动手写数据结构之单链表

单链表实现

1 定义

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。

2 基本操作

在链表头添加元素

查询包含指定数值的节点

删除指定节点

3 包含元素

链表头 head

节点 Node

节点中数据域 data

节点中指针域 next

链表长度 size

4 分析

节点Node由数据域和指针域构成

数据域和指针域

单链表整体

单链表整体

插入操作

在链表头添加元素的过程就是让新节点的下一节点指向头节点,再让头节点指向新节点

newNode.next = first

first = newNode

删除操作

删除操作分两步:

  1. 先找到要删除的节点
  2. 删除该节点

删除节点时需要判断该节点是不是第一个

具体程序实现

public class SingleLinkedList {

    private Node first;
    
    public SingleLinkedList() {
        first = null;
    }

    public void insert(int data){
        Node newNode = new Node(data);
        newNode.next = first;
        first = newNode;
    }

    public Node find(int data){

        Node current = first;

        while (current.data != data){
            if (current.next == null){
                return null;
            }else {
                current = current.next;
            }
        }

        return current;

    }

    public Node delete(int data){
        Node current = first;
        Node previous = first;

        current = find(data);

        if (current != null){
            if (current == first){
                first = first.next;
            }else {
                previous.next = current.next;
            }
        }

        return current;
    }

    class Node{

        private int data;

        private Node next;

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

        @Override
        public String toString() {
            return "Node{" +
                    "data=" + data +
                    '}';
        }
    }

    public void disPlay(){

        Node temp = first;

        while (temp != null){
            System.out.println(temp.data);
            temp = temp.next;
        }

    }

}

你可能感兴趣的:(自己动手写数据结构之单链表)