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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。