链表基础的增删改

插入

按照大小进行排序添加-

	public void addByOrder(HeroNode heroNode) {
		//因为头节点不能动,因此我们仍然通过一个辅助指针(变量)来帮助找到添加的位置
		//因为单链表,因为我们找的temp 是位于 添加位置的前一个节点,否则插入不了
		HeroNode temp = head;
		boolean flag = false; // flag标志添加的编号是否存在,默认为false
		while(true) {
			if(temp.next == null) {//说明temp已经在链表的最后
				break; //
			} 
			if(temp.next.no > heroNode.no) { //位置找到,就在temp的后面插入
				break;
			} else if (temp.next.no == heroNode.no) {//说明希望添加的heroNode的编号已然存在
				
				flag = true; //说明编号存在
				break;
			}
			temp = temp.next; //后移,遍历当前链表
		}
		//判断flag 的值
		if(flag) { //不能添加,说明编号存在
			System.out.printf("准备插入的编号 %d 已经存在了, 不能加入\n", heroNode.no);
		} else {
			//插入到链表中, temp的后面
			heroNode.next = temp.next;
			temp.next = heroNode;
		}
	}

追加-末尾

	void add(HerNode herNode){
		HerNode htemp=head;
		while(htemp.next!=null){
		htemp=htemp.next;
		}
		htemp.next=herNode;
	}

修改

		void update(HerNode newHerNode){
			if(head.next==null){
				System.out.println("链表为空");
				return;
			}
			HerNode htemp=head.next;
			boolean flag=false;//表示是否找到了默认为false
			while (htemp!=null){
				if(htemp.no== newHerNode.no){
					flag=true;
					break;
				}
				htemp=htemp.next;
			}
			if(flag){
				htemp.name= newHerNode.name;
				htemp.nickname= newHerNode.nickname;
			}else{
				System.out.printf("没有找到编号%d的",newHerNode.no);
			}
		}

删除

		void delete(int no){
			if(head.next==null){
				System.out.println("链表为空");
				return;
			}
			HerNode htemp=head;
			boolean flag=false;//表示是否找到了默认为false
			while(htemp.next!=null){
				if(htemp.next.no==no){
					flag=true;
					break;
				}
				htemp=htemp.next;
			}
			if(flag){
				htemp.next = htemp.next.next;
			}else{
				System.out.printf("要删除的 %d 节点不存在\n", no);
			}
		}
posted @ 2021-10-18 08:33  是星辰闪耀  阅读(51)  评论(0)    收藏  举报