带头单链表有序版
package com.atguigu.linkedlist;/*** @創(chuàng)建人 wdl* @創(chuàng)建時間 2021/3/17* @描述*/
public class SingleLinkedListDemo {public static void main(String[] args) {//進行測試//先創(chuàng)建節(jié)點HeroNode hearo1 = new HeroNode(1, "宋江", "及時雨");HeroNode hearo2 = new HeroNode(2, "盧俊義", "玉麒麟");HeroNode hearo3 = new HeroNode(3, "吳用", "智多星");HeroNode hearo4 = new HeroNode(4, "林沖", "及時釘釘雨");//創(chuàng)建一個鏈表SingleLinkedList singleLinkedList = new SingleLinkedList();
// //加入
// singleLinkedList.add(hearo1);
// singleLinkedList.add(hearo2);
// singleLinkedList.add(hearo3);
// singleLinkedList.add(hearo4);//加入按照編號的順序singleLinkedList.addByOrder(hearo1);singleLinkedList.addByOrder(hearo4);singleLinkedList.addByOrder(hearo2);singleLinkedList.addByOrder(hearo3);//顯示一把singleLinkedList.list();}
}//定義SingleLinkedList管理我們的英雄
class SingleLinkedList{//先初始化一個頭節(jié)點,頭節(jié)點不要動,不存放具體的數(shù)據(jù)private HeroNode head=new HeroNode(0,"","");//添加節(jié)點到單向鏈表//思路,當不考慮編號順序是//1.找到當前鏈表的最后節(jié)點//2.將最后這個節(jié)點的next指向新的節(jié)點public void add(HeroNode heroNode){//因為head節(jié)點不能動,因此我們需要一個輔助遍歷tempHeroNode temp=head;//遍歷鏈表,找到最后while(true){//找到鏈表的最后if(temp.next==null){break;}//如果沒有找到最后,將temp后移temp=temp.next;}//當退出while循環(huán)時,temp就指向了鏈表的最后//將最后這個節(jié)點的next指向新的節(jié)點temp.next=heroNode;}//第二種方式在添加英雄時,根據(jù)排名將英雄插入到指定位置// (如果有這個排名,則添加失敗,并會給出提示)public void addByOrder(HeroNode heroNode){//因為頭節(jié)點不能動,因此我們?nèi)匀煌ㄟ^一個輔助指針(變量)來幫助找到添加的位置//因為單鏈表,我們找到的temp是位于添加位置的前一個節(jié)點,否則插入不了HeroNode temp=head;boolean flag=false;//flag標志添加的編號是否存在,默認為falsewhile (true){if(temp.next==null){//說明temp已經(jīng)在鏈表的最后break;}if(temp.next.no>heroNode.no){//位置找到,就在temp的后面插入break;}else if(temp.next.no==heroNode.no){//說明希望添加的heroNode的編號已經(jīng)存在flag=true;//說明編號存在break;}temp=temp.next;//后移,遍歷當前鏈表}//判斷flag的值if(flag){//不能添加,說明編號存在System.out.println("準備插入的英雄的編號"+heroNode.no+"已經(jīng)存在了,不能加入");}else {//插入到鏈表中,temp的后面heroNode.next=temp.next;temp.next=heroNode;}}//顯示鏈表[遍歷]public void list(){//判斷鏈表是否為空if(head.next==null){System.out.println("鏈表為空");return;}//因為頭節(jié)點不能動,因此我們需要一個輔助變量來遍歷HeroNode temp= head.next;while(true){//判斷是否到鏈表最后if(temp==null){break;}//輸出節(jié)點的信息System.out.println(temp.toString());//將temp后移,一定要小心temp=temp.next;}}}//定義HeroNode,每個HeroNode對象就是一個節(jié)點
class HeroNode{public int no;public String name;public String nickname;public HeroNode next;//指向下一個節(jié)點//構(gòu)造器public HeroNode(int no,String name,String nickname){this.no=no;this.name=name;this.nickname=nickname;}//為了顯示方法,我們重寫toString@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +", nickname='" + nickname + '\'' +
// ", next=" + next +'}';}
}
總結(jié)
- 上一篇: Bluehost vs.MilesWeb
- 下一篇: 双向链表VS单向链表