单链表修改节点(java实现)

package LinkedList;

import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import com.sun.xml.internal.ws.api.ha.StickyFeature;
import jdk.internal.org.objectweb.asm.util.CheckAnnotationAdapter;

import javax.lang.model.element.NestingKind;

public class SingleLinkedListDemo {
    public static void main (String[] args){
        //创建节点
        HeroNode hero1 = new HeroNode(1,"宋江","及时雨");
        HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
        HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
        HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
        SingleLinkedList singleLinkedList=new SingleLinkedList();
        singleLinkedList.addByOrder(hero1);
        singleLinkedList.addByOrder(hero4);
        singleLinkedList.addByOrder(hero2);
        singleLinkedList.addByOrder(hero3);
        singleLinkedList.addByOrder(hero3);
        
        singleLinkedList.list();
        HeroNode newheroNode=new HeroNode(2,"xiaolu","xiaoyu");
        singleLinkedList.upDate(newheroNode);
        System.out.printf("修改后:\n");
        singleLinkedList.list();
    }

}
 class SingleLinkedList{
    //初始化头结点,不要动
     private HeroNode head=new HeroNode(0,"","");
     //添加节点到单链表
     //找到最后节点把这个节点的next指向新节点
     public void add(HeroNode heroNode){
         //因为head节点不能动
         HeroNode temp=head;
         //遍历链表找到最后节点
         while(true){
             if (temp.next==null)
             {break;}
             temp=temp.next;
         }
         temp.next=heroNode;

     }
     //修改节点内容
     public void upDate(HeroNode newheroNODE)
     {
         if (head.next==null){
             System.out.printf("链表为空");
             return;
         }
         HeroNode temp=head.next;
         boolean flag=false;
         while (true){
             if (temp==null){
                 break;//已经遍历结束

             }
             if (temp.no== newheroNODE.no){
                 //找到
                 flag=true;
                 break;
             }
             temp=temp.next;
         }
         if (flag){
             temp.name= newheroNODE.name;;
             temp.nickname= newheroNODE.nickname;;

         }
         else {
             System.out.printf("没有找到编号为%d的节点",newheroNODE.no);
         }
     }

     public void list(){
         if(head==null)
         {
             System.out.println("链表为空");
             return;
         }
         HeroNode temp = head.next;
         while (true){
             //判断是否到最后
             if (temp==null){
                 break;
             }
             System.out.println(temp);
             //next后移
             temp=temp.next;
         }
     }
     public void addByOrder(HeroNode heroNode){
         //通过temp找到添加的位置
         //temp位于添加节点前边
         HeroNode temp= head;
         boolean flag=false;
         while (true){
             if (temp.next==null)
             {
                 break;
             }
             if (temp.next.no>heroNode.no)
             {
                 //在temp后添加
                 break;
             }
             if (temp.next.no==heroNode.no){
                 //编号存在、
                 flag=true;
                 break;
             }
             temp=temp.next;
         }
         if (flag){
             System.out.printf("准备添加的编号%d已经存在",heroNode.no);

             }
         else{
             heroNode.next=temp.next;
             temp.next=heroNode;

         }
     }
}

//定义节点
class HeroNode{
    public int no;
    public String name;
    public String nickname;
    public HeroNode next;

    public HeroNode(int hNo, String hName,String hNickName) {
        this.no=hNo;
        this.name=hName;
        this.nickname=hNickName;
    }
    //为了显示方便,重写ToString方法
    @Override
    public String toString() {
        return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";
    }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值