java单链表的删除,java单表增删改查

  java单链表的删除,java单表增删改查

  本文分享java添加或删除单链表的具体代码,供大家参考。具体内容如下

  00-1010链表是一个有序列表,但它存储在内存中的方式如下

  小结:

  链表以节点或链存储的形式存储。每个节点包含数据字段,下一个字段指向下一个节点。如图,发现链表中的每个节点不一定是连续存储的。链表分为有头节点的链表和无头节点的链表。根据实际需求,单链表(带头结点) 的逻辑结构图如下

  单链表的增删改应用实例

  利用带head头的单向链表实现对——三国英雄榜的管理,完成添加、删除、查找英雄的操作。

  

  1.第一种方法是直接在链表末尾添加英雄。

  2.第二种方式是添加英雄时根据排名将英雄插入指定位置(如果有这个排名,则添加失败并给出提示)

  

  

  思路:

  (1)首先找到节点,并通过遍历、

  (2)temp . name=new heronode . name;temp . nickname=new heronode . nickname

  代码

  package com . hsy . linked list;class public single linked list demo { public static void main(string[]args){//test//首先创建节点HeroNode hero1=new HeroNode(1,刘备,任一);HeroNode hero2=new HeroNode(2,关羽,武圣);HeroNode hero3=new HeroNode(3,张飞,暴躁);HeroNode hero4=新HeroNode(4,赵云,单骑救世主);//创建链表单链表单链表=新建单链表();//添加到链表//singlinkedlist . Add(hero 1);//singlelinkedlist . add(hero 2);//singlelinkedlist . add(hero 3);//singlelinkedlist . add(hero 4);//添加单链表。按编号顺序添加ByOrder (hero1 );singlelinked list . addbyorder(hero 4);singlelinked list . addbyorder(hero 3);singlelinked list . addbyorder(hero 2);//显示singlinked list . showlist();//测试修改heronode newheronode=newheronode(3,炖蛋,暴躁锤);singlelinked list . update(newHeroNode);System.out.println(修改的链表:);singlelinked list . showlist();//删除一个节点singlinked list . Delete(1);System.out.println(已删除的链表:);singlelinked list . showlist();} }//定义singlinkedlist来管理我们的英雄类singlinkedlist {//初始化一个head节点,不存储数据私有最终英雄节点head=new hero node (0,, );//Add//向单向链表添加节点public void add

  (HeroNode heroNode) {        //思路:(不考虑编号顺序)        //1.找到当前链表的最后节点        //2.将最后这个节点的next域指向新的节点        HeroNode temp = head;        //遍历链表,找到最后的节点        while (true) {            if (temp.next == null) {                break;            }            //如果没有找到最后,将temp后移            temp = temp.next;        }        //必须保证退出while循环时,temp指向链表的最后,并将最后这个节点的next域指向新的节点        temp.next = heroNode;    }    //第二种方式在添加英雄时,根据排名将英雄插入到指定位置    // (如果有这个排名,则添加失败,并给出提示)    public void addByOrder(HeroNode heroNode) {        //由于头节点不能动,因此我们仍然通过一个辅助变量来帮助我们找到添加的位置        //因为是单链表,因此我们找的temp位于添加位置的前一个结点,否则不能插入        HeroNode temp = head;        boolean flag = false;//标识添加的编号是否已经存在,默认为false        while (true) {            if (temp.next == null) {                break;            }            if (temp.next.no > heroNode.no) {//位置找到                break;            } else if (temp.next.no == heroNode.no) {//说明希望添加的编号已经存在                flag = true;                break;            }            temp = temp.next;        }        //判断flag的值        if (flag) {//编号已经存在            System.out.println("准备插入的英雄的编号:" + heroNode.no + "已经存在,不能再加入!");        } else {            heroNode.next = temp.next;            temp.next = heroNode;        }    }    //删    //head不能动,我们需要一个temp辅助节点找到待删除节点的前一个结点    //我们在比较的时候是temp.next.no和需要删除的节点的no进行比较    public void delete(int no) {        HeroNode temp = head;        boolean flag = false;        while (true) {            if (temp.next == null) {                break;            }            if (temp.next.no == no) {                //找到了待删除节点的前一个结点temp                flag = true;                break;            }            temp = temp.next;        }        if (flag) {            temp.next = temp.next.next;        } else {            System.out.println("要删除的" + no + "节点不存在");        }    }    //改    //修改节点的信息,根据编号来修改    public void update(HeroNode newHeroNode) {        //判断链表是否为空        if (head.next == null) {            System.out.println("链表为空!");        }        HeroNode temp = head.next;        boolean flag = false;        while (true) {            if (temp == null) {                break;            }            if (temp.no == newHeroNode.no) {                //找到                flag = true;                break;            }            temp = temp.next;        }        //根据flag判断是否找到需要修改的值        if (flag) {//编号已经存在            temp.name = newHeroNode.name;            temp.nickname = newHeroNode.nickname;        } else {//没有找到            System.out.println("没有找到编号为:" + newHeroNode.no + "的节点,不能修改");        }    }    //查    //显示遍历链表    public void showList() {        //判断链表是否为空        if (head.next == null) {            System.out.println("链表为空!");        }        //由于头节点不能动,因此我们需要一个辅助变量来遍历        HeroNode temp = head.next;        while (true) {            //判断链表是否到最后            if (temp == null) {                break;            }            System.out.println(temp);            //这时需要将temp后移,否则会陷入死循环            temp = temp.next;        }    }}//定义一个HeroNode,每个HeroNode对象就是一个节点class HeroNode {    public int no;    public String name;    public String nickname;    public HeroNode next;//指向下一个节点    //创建构造器    public HeroNode(int no, String name, String nickname) {        this.no = no;        this.name = name;        this.nickname = nickname;    }    @Override    public String toString() {        return "HeroNode{" +                "no=" + no +                ", name=" + name + +                ", nickname=" + nickname + +                };    }}输出结果

  

 

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

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

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