数据结构之双链表

这篇具有很好参考价值的文章主要介绍了数据结构之双链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.复杂方法的图分析

数据结构之双链表,数据结构,java,数据库
数据结构之双链表,数据结构,java,数据库

2.My_LinkedList代码

package My_liNKEDlIST;

public class My_LinkedList implements MY_lIST{
    static class ListNode{
        public int val;
        public ListNode prev;
        public ListNode next;
        public ListNode(int val){
           this.val = val;
        }

    }
    public ListNode head;
    public ListNode last;
    @Override
    public void addFirst(int data) {
        ListNode node = new ListNode(data);
         if(head == null){
             head = node;
             last = node;
         }
         else{
             node.next = head;
             head.prev = node;
             head = node;
         }
    }

    @Override
    public void addLast(int data) {
       ListNode node = new ListNode(data);
       if(head == null){
           head = node;
           last = node;
       }
       else{
           last.next = node;
           node.prev = last;
           last = node;
       }
    }

    @Override
    public void addIndex(int index, int data) throws IndexOutOFException{
          int len = size();
          if(index < 0 || index > len){
              throw new IndexOutOFException("越界了");
          }
          if(index == 0){
              addFirst(data);
              return;
          }
          if(index == len){
              addLast(data);
              return;
          }
          ListNode cur = head;
          ListNode node = new ListNode(data);
          while(index != 0){
              cur = cur.next;
              index--;
          }
           cur.prev.next = node;
           node.next = cur;
           node.prev = cur.prev;
           cur.prev = node;
    }

    @Override
    public boolean contains(int key) {
        ListNode cur = head;
        while(cur != null){
            if(cur.val == key){
                return true;
        }
            cur = cur.next;
    }
        return false;
    }

    @Override
    public void remove(int key) {
        ListNode cur = head;
        while(cur != null){
            if(cur.val == key){
                //如果删除的结点为头结点
                if(cur == head){
                   head = head.next;
                   if(head != null) {
                       head.prev = null;
                   }
                }else {
                     if(cur == last){
                         cur.prev.next = cur.next;
                         last = last.prev;
                     }else {
                         cur.prev.next = cur.next;
                         cur.next.prev = cur.prev;
                     }
                }
                return;
            }
            else{
                cur = cur.next;
            }
        }
    }
    @Override
    public void removeAllKey(int key) {
        ListNode cur = head;
        while(cur != null){
            if(cur.val == key){
                //如果删除的结点为头结点
                if(cur == head){
                    head = head.next;
                    if(head != null) {
                        head.prev = null;
                    }
                }else {
                    if(cur.next == null) {
                        cur.prev.next = cur.next;
                    }else {
                        cur.next.prev = cur.prev;
                    }
                }
            }
                cur = cur.next;
        }
    }
    @Override
    public int size() {
        ListNode cur = head;
        int count = 0;
        while(cur != null){
            count++;
            cur = cur.next;
        }
        return count;
    }

    @Override
    public void display() {
        ListNode cur = head;
        while(cur != null){
            System.out.println(cur.val+" ");
            cur = cur.next;
        }
    }

    @Override
    public void clear() {
       ListNode cur = head;
       while(cur != null){
           ListNode tmp = cur.next;
           cur.prev = null;
           cur.next = null;
           cur = tmp;
       }
       this.head = null;
       this.last = null;
    }
}

3.接口MY_lIST

public interface MY_lIST {
        // 2、无头双向链表实现

        //头插法
        public void addFirst(int data);
        //尾插法
        public void addLast(int data);
        //任意位置插入,第一个数据节点为0号下标
        public void addIndex(int index,int data);
        //查找是否包含关键字key是否在单链表当中
        public boolean contains(int key);
        //删除第一次出现关键字为key的节点
        public void remove(int key);
        //删除所有值为key的节点
        public void removeAllKey(int key);
        //得到单链表的长度
        public int size();
        public void display();
        public void clear();
    }

4.测试类

public class Test {
    public static void main(String[] args) {
             My_LinkedList LIST = new My_LinkedList();
             LIST.addFirst(1);
             LIST.addFirst(1);
             LIST.addFirst(1);
             //LIST.display();
             LIST.addLast(4);
             LIST.addLast(5);
             LIST.addLast(6);
             //LIST.display();
              LIST.addIndex(4,7);
              //LIST.display();
              //LIST.clear();
              //LIST.display();
           //LIST.remove(4);
        LIST.removeAllKey(1);
           LIST.display();
    }
}

双链表的思路和单链表大同小异,就是多加了一个前驱指针,希望大家好好学习双链表的代码文章来源地址https://www.toymoban.com/news/detail-724884.html

到了这里,关于数据结构之双链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java碳排放数据信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点     java Web碳排放数据信息管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环 境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java Web碳排放数据信

    2024年01月22日
    浏览(41)
  • java生态环境评价Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点     java 生态环境评价管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java web 生态环境评价系

    2024年02月19日
    浏览(33)
  • java排课管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点     java排课管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java web 排课管理系统1 下载地址

    2024年02月19日
    浏览(35)
  • java流浪动物保护系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点     java Web 流浪动物保护系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 二、功能介绍 前台功能:

    2024年02月04日
    浏览(31)
  • java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点     java Web 体育明星管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java Web体育明星管理系统

    2024年02月02日
    浏览(36)
  • jsp 图书销售系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点      JSP 图书销售系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 jsp 图书销售系统Myeclipse开发mys

    2024年02月11日
    浏览(33)
  • java 宠物医院系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

    一、源码特点     java 宠物医院系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java Web 宠物医院管理系统1 下载地

    2024年02月20日
    浏览(33)
  • java springboot VUE粮食经销系统开发mysql数据库web结构java编程计算机网页源码maven项目

    一、源码特点   springboot VUE 粮食经销系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发) ,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 springboot vue 粮食经销系统

    2024年02月05日
    浏览(35)
  • java 学生信息管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

    一、源码特点     java 学生信息管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java 学生信息管理系统 二、

    2024年02月09日
    浏览(35)
  • SSM手机资讯网站系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

    一、源码特点   SSM 手机资讯网站系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 ssm手机资讯网站系统 前段主要技术 html.css jquery 后端

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包