如何操作单向链表

package node.SinglyLinkedList;

/**
 * @author Eightn0
 * @create 2021-03-12 14:12
 */

//首先定义Node类

class  Node{
      int data;
      int np;
      String names;
      Node next;

      public Node(int data, int np, String names) {
            this.data = data;
            this.np = np;
            this.names = names;
            this.next = null;
      }
}

public class LinkedList {
      private Node first;
      private Node last;
      private  Node delNode;
      Node newNode;

      //判断目前链表是否是空链表
      public boolean isEmpty(){
            return first == null;
      }

      //用来将目前的链表内容打印出来
      public void print(){
            Node current = first;
            while (current != null){
                  System.out.println(current.data + current.names + current.np );
                  current = current.next;
            }
            System.out.println();
      }

      //用来将指定的节点插入至目前的链表
      public void insert(int data, String names, int np){
            newNode = new Node(data, np, names);
            if (this.isEmpty()){
                  first = newNode;
                  last = newNode;
            }else {
                  last.next = newNode;
                  last = newNode;
            }
      }

      //删除列表的第一个节点
      public void deletePre(){
                  first = first.next;
      }

      //删除列表中间的节点,将删除节点的前一个节点的指针,指向欲删除节点的下一个节点
      public void deleteMid(){
            newNode = first;
            Node tmp = first;
            while(newNode.data != delNode.data){
                  tmp = newNode;
                  newNode = newNode.next;
            }
            tmp.next = delNode.next;
      }

      //删除列表最后一个节点
      public void deleteLast(){
            newNode = first;
            while (newNode.next != last) newNode = newNode.next;
            newNode.next = last.next;
            last = newNode;
      }

      /*插入节点:
      * 在表头插入:令新节点指向表头,将表头移到新节点上
      * 在表尾插入:令表尾指向新节点,令新节点指向null
      * 在XY中间插入,令X指向新节点,令新节点指向Y
      * */
      public void insert(Node ptr){
            Node tmp;
            Node newNode;
            if (this.isEmpty()){
                  first = ptr;
                  last = ptr;
            }else {
                  if (ptr.next == first){ //插入第一个节点
                        ptr.next = first;
                        first = ptr;
                  }else {
                        if (ptr.next == null){//插入最后一个节点
                              last.next = ptr;
                              last = ptr;
                        }else {//插入中间节点
                              newNode = first;
                              tmp = first;
                              while (ptr.next != newNode.next){
                                    tmp = newNode;
                                    newNode = newNode.next;
                              }
                              tmp.next = ptr;
                              ptr.next = newNode;
                        }
                  }
            }

      }
}

猜你喜欢

转载自blog.csdn.net/vivian233/article/details/114697663