java实现双向链表的增删功能,java中的单向链表和双向链表

  java实现双向链表的增删功能,java中的单向链表和双向链表

  本文实例为大家分享了爪哇实现双向链表的具体代码,供大家参考,具体内容如下

  

1、双向链表

1.1 双向链表的每个节点组成包含节点数据,上一个节点(前),下一个节点(下一个)

 

  1.2 双向链表节点结构

  类节点{//节点数据数据(同Internationalorganizations)国际组织数据;节点在…之前下一个节点;公共节点(int data){ this。数据=数据;}公共节点(){ super();} }

2、双向链表的增删改查(crud)

2.1 双向链表的增删改查

 

  公共类双向链表{首先是私有节点;私有节点电流;私有静态类节点{ int数据节点在…之前下一个节点;公共节点(int data){ super();this.data=data}公共节点(){ super();} } public DoubleLinkedList(){ super();} /** * 双向链表增加*/public void add(int val) { //如果是头结点if(first==null){ Node Node=new Node(val);first=节点;first.pre=nullfirst.next=null当前=第一;} else { Node Node=new Node(val);current.next=nodenode.pre=当前;电流=节点;} } /** * 双向链表的删除删除所有值为英国压力单位的元素*/public void del(int val){ if(first==null){ system。出去。println(双向链表为空,无法进行删除操作!);} else { Node Node=first while(true){//首节点的删除可能if (node.data==val) { //如果只有一个节点如果(节点。next==null){ node=null;first=nullSystem.out.println(删除所有的瓦尔成功);返回;} else { node=node.nextnode。前。next=nullnode.pre=nullfirst=节点;//删除后重新循环判断首节点是否值相等继续;} } else { while (node.next!=null){ if(节点。data==val){ node。前。下一个=节点。n

  ext;                            node.next.pre = node.pre;                            Node tempNode = node.pre;                            node.pre=null;                            node.next=null;                            node = tempNode;                        }                        node = node.next;                    }                    // 末节点删除可能                    if (node.data == val) {                        node.pre.next=null;                        node.pre=null;                    }                    System.out.println("删除所有的"+val+"成功");                    //末节点判断完成后,结束循环                    return;                }            }        }    }    /**     * 遍历双向链表操作     */    public void traverse() {        if(first==null) {            System.out.println("双向链表为空");        }else {            Node node = first;            //循环遍历到倒数第二个节点截止            while(node.next!=null) {                System.out.print(node.data+" ");                node=node.next;            }            //遍历最后一个节点            System.out.print(node.data);        }    }    /**     * 双向链表插入操作,在所有值为value的后面插入一个数insert     */    public void insert(int value,int insert) {                if(first==null) {            System.out.println("双向链表为空,无法插入");        }else {            Node node = first;            //循环遍历到倒数第二个节点截止            while(node.next!=null) {                if(node.data==value) {                    Node insertNode = new Node(insert);                    node.next.pre = insertNode;                    insertNode.next = node.next;                    node.next = insertNode;                    insertNode.pre = node;                }                node=node.next;            }            //最后一个节点后插入            if(node.data == value) {                Node insertNode = new Node(insert);                node.next = insertNode;                insertNode.pre = node;            }            System.out.println();            System.out.println("插入操作完成");                    }    }    /**     * 双向链表修改数据,将所有值为val的修改为revised     */    public void revise(int val,int revised) {        if(first==null) {            System.out.println("双向链表为空,无法修改");        }else {            Node node = first;            while (node.next!=null) {                if(node.data == val) {                    node.data = revised;                }                node=node.next;            }            if(node.data == val) {}            node.data = revised;        }        System.out.println("修改操作完成");    }    /**     * 查找双向链表中是否包含val值     * @param val     */    public void contain(int val) {        if(first==null) {            System.out.println("链表为空,无法查找");        }else {            Node node = first;            while(node!=null) {                if(node.data==val) {                    System.out.println("该链表中包含"+val+"的值");                    return;                }else {                    node=node.next;                }            }            System.out.println("该链表不包含"+val);        }    }}2.2 测试类(main入口函数)

  

public class Main {    public static void main(String[] args) {        DoubleLinkedList list = new DoubleLinkedList();        list.add(1);        list.add(1);        list.add(2);        list.insert(1, 3);        list.add(2);        list.add(3);        list.traverse();        System.out.println();        list.del(1);            list.traverse();        list.add(4);        System.out.println();        list.traverse();        System.out.println();        list.contain(4);                list.contain(3);        list.contain(0);    }}

3、一些缺点待修改

1)、循环结束是到倒数第二个节点截止的,要考虑多种不同的情况,头节点删除,尾结点删除等,导致删除函数复杂了很多2)、在contain函数中有修改到循环到最后一个节点3)、后续对删除函数修改有空再操作(待完成)

 

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: