欢迎访问宙启技术站
智能推送

Java函数实现链表元素的删除

发布时间:2023-06-01 18:52:23

链表是一种非常重要的数据结构,它是由一系列节点组成的,每个节点都包含了存储数据的部分和指向下一个节点的指针,它的特性是每个节点只需要记录其后继节点的地址,而不需要连续的内存空间。

在Java语言中,我们可以使用类来实现链表结构,我们定义一个Node类,其中包含两个元素,一个是数据元素,另一个是指向下一个节点的指针,定义方式如下:

public class Node{

    public int data;

    public Node next;

}

我们还需要定义一个LinkedList类来管理这个链表,它包含了链表的头节点和尾节点,以及一些基本的操作方法,代码如下:

public class LinkedList{

    public Node head;

    public Node tail;

    //初始化链表

    public LinkedList(){

        head = null;

        tail = null;

    }

    //添加元素到链表的末尾

    public void addToList(int value){

        Node node = new Node(value,null);

        if(head == null){

            head = node;

            tail = node;

        }else{

            tail.next = node;

            tail = node;

        }

    }

    //在指定位置插入元素

    public void insertAt(int value, int position){

        Node node = new Node(value,null);

        if(position == 0){

            node.next = head;

            head = node;

            if(tail == null){

                tail = head;

            }

            return;

        }

        int count = 0;

        Node current = head;

        Node previous = null;

        while(current != null && count < position){

            previous = current;

            current = current.next;

            count++;

        }

        previous.next = node;

        node.next = current;

        if(current == null){

            tail = node;

        }

    }

    //从链表删除元素

    public void deleteFromList(int value){

        Node current = head;

        Node previous = null;

        while(current != null && current.data != value){

            previous = current;

            current = current.next;

        }

        if(current == null){

            return;

        }

        if(previous == null){

            head = current.next;

        }else{

            previous.next = current.next;

        }

        if(current.next == null){

            tail = previous;

        }

    }

}

在上述代码中,我们定义了一个deleteFromList方法用来删除链表中的元素,这个方法的实现方法是从链表头开始遍历链表,将待删除的值与当前节点的值比较,如果相等就删除该节点。

同时需要维护previous和current两个变量,previous用来记录上一个节点的位置,current用来记录当前节点的位置,这样在删除当前节点之后,我们只需要将previous的next指向current的next即可,这样就实现了删除操作。

如果删除的是链表的头部元素,那么我们只需要将head指向当前节点的next即可,并且需要做特判,如果链表只有一个元素,需要将tail置为null。

值得注意的是,如果删除的是链表的末尾元素,那么我们需要将tail指向previous。

以上就是Java函数实现链表元素的删除的实现方法。