JAVA实现双链表(记录)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、创建节点
  • 二、创建双链表
  • 3.增删查,
  • 4.总体代码
  • 5.总结



写的超详细,超爱☞大神指路
双链表的题目可以做做☞双链表

一、创建节点

get,set可以省略,这里纯属习惯使然,构造器不能省


 class Node{
    //初始化一个节点对象
    Node pre;
    Node next;
    int data;

     public Node getPre() {
         return pre;
     }

     public void setPre(Node pre) {
         this.pre = pre;
     }

     public Node getNext() {
         return next;
     }

     public void setNext(Node next) {
         this.next = next;
     }

     public int getData() {
         return data;
     }

     public void setData(int data) {
         this.data = data;
     }

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

     public Node() {
     }
 }

二、创建双链表

size 和 last 都是可以省略,之后的判断也可以可以使用temp.next是否为空

//创建双向链表
class doublylinkedList{
   Node head=new Node(0);//初始化头节点,头节点不能动,不妨具体的数据
   Node last;
   int size;

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }
    }

3.增删查,

只记录一下增删查,注意循环的判断条件。

   //----遍历链表---------
     public void showlist() {

         //判断链表是否为空
         if (size==0) {
             System.out.println("链表为空");
             return;
         }
//         因为head不能动,so我们需要一个辅助变量遍历
         Node  temp=head;
         while (size-->0) {
             //判断链表是否到最后
             if (temp==null) {
                 break;
             }
             //输出节点信息
             System.out.println(temp.data);

             //后移temp
             temp=temp.next;
             }
         }
     //返回头节点
    public Node getHead2() {
        System.out.println("head的值"+head.data);
        return head;

    }


    //----1.添加头节点-----
    public void addHead(Node node){
        if(size==0){
            head=node;
            last=head;
        }
        else{
            Node te=head;
            node.next=te;
            te.pre=node;
            head=node;
        }
        size++;



    }
    //------2.添加尾节点--------
    public void addLast(Node node){
        if(size==0){
            head=node;
            last=head;
        }
        else {
            Node te=last;
            te.next=node;
            node.pre=te;
            last=node;

        }
        size++;
    }
    //------3.添加一个数字--------
    public  void addData(Node node){
        //因为head不能动,so我们需要一个辅助遍历temp
        Node temp=head;
       //遍历链表,找到最后
        while (true){
            if(temp.next==null){
              break;
            }
            else{
                temp=temp.next;

            }
        }
        temp.next=node;
        node.pre=temp;

        size++;

    }
    //-----4.删除头节点-------
     public void deleHead(){
        if (size==0){
            System.out.println("链表为空");
        }
        else {
            Node te=head.next;
            head.next.pre=null;
            head.next=null;
            head=te;
            size--;
        }

     }

4.总体代码



/*
双链表实现
 */
public class DoublyLinkedList{
    public static void main(String[] args) {
        doublylinkedList douLl=new doublylinkedList();

        douLl.addHead(new Node(43));
        douLl.addHead(new Node(21));
        douLl.addLast(new Node(232));
        douLl.addData(new Node(1212));
        douLl.addData(new Node(24));
        douLl.deleHead();

        douLl.showlist();
        douLl.getHead2();

    }
}
 class Node{
    //初始化一个节点对象
    Node pre;
    Node next;
    int data;

     public Node getPre() {
         return pre;
     }

     public void setPre(Node pre) {
         this.pre = pre;
     }

     public Node getNext() {
         return next;
     }

     public void setNext(Node next) {
         this.next = next;
     }

     public int getData() {
         return data;
     }

     public void setData(int data) {
         this.data = data;
     }

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

     public Node() {
     }
 }
 //创建双向链表
class doublylinkedList{
   Node head=new Node(0);//初始化头节点,头节点不能动,不妨具体的数据
   Node last;
   int size;

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

     //----遍历链表---------
     public void showlist() {

         //判断链表是否为空
         if (size==0) {
             System.out.println("链表为空");
             return;
         }
//         因为head不能动,so我们需要一个辅助变量遍历
         Node  temp=head;
         while (size-->0) {
             //判断链表是否到最后
             if (temp==null) {
                 break;
             }
             //输出节点信息
             System.out.println(temp.data);

             //后移temp
             temp=temp.next;
             }
         }
     //返回头节点
    public Node getHead2() {
        System.out.println("head的值"+head.data);
        return head;

    }






    //----1.添加头节点-----
    public void addHead(Node node){
        if(size==0){
            head=node;
            last=head;
        }
        else{
            Node te=head;
            node.next=te;
            te.pre=node;
            head=node;
        }
        size++;



    }
    //------2.添加尾节点--------
    public void addLast(Node node){
        if(size==0){
            head=node;
            last=head;
        }
        else {
            Node te=last;
            te.next=node;
            node.pre=te;
            last=node;

        }
        size++;
    }
    //------3.添加一个数字--------
    public  void addData(Node node){
        //因为head不能动,so我们需要一个辅助遍历temp
        Node temp=head;
       //遍历链表,找到最后
        while (true){
            if(temp.next==null){
              break;
            }
            else{
                temp=temp.next;

            }
        }
        temp.next=node;
        node.pre=temp;

        size++;

    }
    //-----4.删除头节点-------
     public void deleHead(){
        if (size==0){
            System.out.println("链表为空");
        }
        else {
            Node te=head.next;
            head.next.pre=null;
            head.next=null;
            head=te;
            size--;
        }

     }

 }

5.总结

自学还是蛮难的,写代码超级消磨时间的(;′⌒`)

你可能感兴趣的:(数据结构,java,链表,开发语言)