单链表(思路+代码)

news/2024/11/25 0:15:20/

变量:

List中的变量

头结点

思路:

(1)Temp = head:::::

head是头结点

addTail

循环至最后添加!

del(int no)

找到编号没有,找到编号就flag = True!

modefy(HeroNode)

找到编号没有,找到编号就flag = True!

show()

定位到head.getnext()循环

addByOrder

如果说找到了相等的我们就退出,flag = true

其他情况(head+null链表,no < node.no)都是需要进行添加

length 循环

findLastindex() 倒数第几个位置上 i = size - index

reverseSetList()  cur next两个变量,revHead一个新的头结点

逆序打印 采用栈(压栈、出栈便可)

公式:

倒数第几个位置:i = size - index

代码:

package linkedList;import java.util.Stack;public class SingleLinkedList {public static void main(String[] args) {HeroNode h1 = new HeroNode(1,"宋江","及时雨");HeroNode h2 = new HeroNode(2, "卢俊义", "玉麒麟");HeroNode h3 = new HeroNode(3, "吴用", "智多星");HeroNode h4 = new HeroNode(4, "豹子头", "林冲");List list = new List();list.addByOrder(h4);list.addByOrder(h2);list.addByOrder(h3);list.addByOrder(h1);list.show();
//		list.addByOrder(h2);
//		System.out.println(list.length(list.getHead()));
//		System.out.print(list.findLastindex(list.getHead(), 2));
//		list.reversetList(list.getHead());
//		list.show();list.revPrint(list.getHead());}}class List{//头结点HeroNode head = new HeroNode(0, " ", " ");public HeroNode getHead() {return head;}public static int length(HeroNode head) {if(head.getNext() == null) {return 0;}HeroNode cur = head;int length = 0;while(true) {if(cur.getNext() == null) {break;}else {cur = cur.getNext();length++;}}return length;}public static HeroNode findLastindex(HeroNode head, int index) {if(head.getNext() == null) {return null;}int size = length(head);if(index <= 0 || index > size) {return null;}HeroNode temp = head.getNext();for(int i = 0; i < size - index; i++) {temp = temp.getNext();}return temp;}public void add(HeroNode heroNode) {HeroNode temp = head;while(true) {if(temp.getNext() == null) {break;}temp = temp.getNext();}temp.setNext(heroNode);}public void addByOrder(HeroNode heroNode) {HeroNode temp = head;boolean flag = false;while(true) {if(temp.getNext() == null) {break;}if (temp.getNext().getNo() > heroNode.getNo()) {break;}else if(temp.getNext().getNo() == heroNode.getNo()) {flag = true;break;}temp = temp.getNext();}if(flag) {System.out.println("待插入的英雄编号已经存在!");}else {heroNode.setNext(temp.getNext());temp.setNext(heroNode);}}public void show() {if(head.getNext() == null) {System.out.println("链表为空!");return;}HeroNode temp = head.getNext();while(true) {if(temp == null) {break;}System.out.println(temp);temp = temp.getNext();}}public void update(HeroNode heroNode) {if(head.getNext() == null) {System.out.println("链表为空!");return;}boolean flag = false;HeroNode temp = head;while(true) {if(temp.getNext() == null) {break;}else if(temp.getNo() == heroNode.getNo()) {flag = true;break;}temp = temp.getNext();}if(!flag) {System.out.println("没有找到该对象!");}else {temp.setNo(heroNode.getNo());temp.setName(heroNode.getName());}}public void del(int no) {HeroNode temp = head;boolean flag = false;while(true) {if(temp.getNext() == null) {break;}if(temp.getNext().getNo() == no) {flag = true;}temp = temp.getNext();}if(flag) {temp.setNext(temp.getNext().getNext());}else {System.out.println("没有找到该对象!");}}public void reversetList(HeroNode head) {if(head.getNext() == null || head.getNext().getNext() == null) {return;}HeroNode cur = head.getNext();HeroNode next = null;HeroNode revHead = new HeroNode(0,"","");while(cur != null) {next = cur.getNext();cur.setNext(revHead.getNext());revHead.setNext(cur);cur = next;}head.setNext(revHead.getNext());}public void revPrint(HeroNode head) {if(head.getNext() == null) {return;}Stack<HeroNode> stack = new Stack<HeroNode>();HeroNode cur = head.getNext();while(cur != null) {stack.push(cur);cur = cur.getNext();}while(stack.size() > 0) {System.out.println(stack.pop());}}
}
class HeroNode{private int no;private String name;private String nickName;private HeroNode next;public HeroNode(int no, String name, String nickName){this.no = no;this.nickName = nickName;this.name = name;}public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public HeroNode getNext() {return next;}public void setNext(HeroNode next) {this.next = next;}@Overridepublic String toString() {return "Hero[no = " + this.no +" name = " + this.name + " nickName = " + this.nickName +"next=" + this.next + "]";}
}


http://www.ppmy.cn/news/723930.html

相关文章

LeetCode刷题 | 583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "…

倒计时1天!电信、联通正式停售达量限速套餐,网友:早办好了

最近几个月&#xff0c;通信网络是一个热门话题&#xff0c;携号转网、5G网络、5G手机都是用户热议的话题&#xff0c;尤其是5G手机准备大规模上市&#xff0c;流量套餐又要经历一批新的改革&#xff0c;要知道上个月三大运营商都宣布将取消达量限速&#xff0c;取而代之的是达…

固话月租费有望全免 包月套餐将逐步取代座机费

运营商表示暂不会“一刀切”,包月套餐或将逐步取代座机费 工信部日前发布消息称&#xff0c;自5月1日起&#xff0c;将调整普通固定电话临时短期租用业务资费管理方式&#xff0c;由目前的政府指导价改为实行市场调节价。这意味着现有的固定电话座机费有望得到调整。 目前&…

Web开播系统的技术演进

随着直播SaaS业务的深入发展&#xff0c;Web端开播的诉求变得越来越强烈&#xff0c;对比客户端开播工具如OBS&#xff0c;Web开播与SaaS平台亲和度高&#xff0c;可以让用户快速体验平台全流程&#xff0c;同时易于分享链接&#xff0c;快速连麦。因此&#xff0c;寻求更加稳定…

清空电脑垃圾文件好用指令

WinR调出运行窗口&#xff0c;然后用下面3个指令去操作 1、%temp% 这个文件夹是系统缓存文件&#xff0c;可以随意删除 2、cleanmgr 系统自带的磁盘清理工具

老电脑适合用linux,老旧电脑适于装什么操作系统

可以一起安装&#xff0c;有两种方法。要对硬盘进行分区&#xff0c;然后把不同的系统安装到各自的分区&#xff0c;还要有引导管理器对两个系统进行引导&#xff0c;选择进入哪一个系统。一般的PC是预装windows的&#xff0c;所以可以先用分区工具调整分区&#xff0c;空出来安…

好用计算机怎么打,电脑输入法有哪些_电脑上最好用的输入法排行 - 系统家园...

输入法是我们日常生活中必不可少的一种软件&#xff0c;尤其是使用电脑的用户们&#xff0c;但是很多用户们不知道电脑输入法有哪些&#xff0c;那个输入法比较好用等&#xff0c;那么适合电脑使用的输入法有哪些呢&#xff0c;快来看看吧~ 最好用的输入法排行&#xff1a; 一、…

中兴新支点国产操作系统新版本越来越好用了

中兴新支点桌面操作系统 V3.2.1版本正式发布了&#xff01;该版本是在 V3.0版本的基础上&#xff0c;针对Linux云桌面、办公、开发等多种场景新增了多个新特性&#xff0c;同时解决了开源组件中既有的数十个bug。 中兴新支点桌面操作系统介绍 中兴新支点桌面操作系统是基于Lin…