java实现单链表的尾插法和按顺序插入

2022-09-05 11:26:48
  • 实现尾插法
  • 实现按照规定的顺序插入
  • 打印单链表
package LinkedList;
/*
 * 模拟创建单链表和插入数据 打印链表等操作
 * 按照顺序插入节点
 * @auhtor bxh
 */
public class SingleLinkedList {
	public static void main(String[] args) {
		Single_LinkedList linkedList = new Single_LinkedList();
//		linkedList.addnode(new HeroNode(1, "骆子豪", "大骡"));
//		linkedList.addnode(new HeroNode(2, "徐晨", "四号骡"));
//		linkedList.addnode(new HeroNode(3, "马诗佳", "five骡"));
//		linkedList.addnode(new HeroNode(4, "戴容江", "小骡"));
//		linkedList.addnode(new HeroNode(5, "谢康", "最骡"));
//		linkedList.show();
		System.out.println("===========================");
		linkedList.addbyorder(new HeroNode(3, "马诗佳", "five骡"));
		linkedList.addbyorder(new HeroNode(2, "徐晨", "四号骡"));
		linkedList.addbyorder(new HeroNode(4, "戴容江", "小骡"));
		linkedList.addbyorder(new HeroNode(1, "骆子豪", "大骡"));
		linkedList.addbyorder(new HeroNode(5, "谢康", "最骡"));
		linkedList.show();
	}
}

/*
 * 创建单链表 实现插入节点的操作
 */
class Single_LinkedList{
	//创建一个头结点
	HeroNode head=new HeroNode(0,"","");
	//创建方法添加节点
	public void addnode(HeroNode node) {
		if(head.next==null)
		{
			head.next=node;
		}     //如果单链表中此时只有头结点,则直接将信赖的结点插入头结点之后
		else {
			HeroNode temp=head;
			while(temp.next!=null) {
				temp=temp.next;
			}             //循环遍历找到链表尾部最后一个节点
			temp.next=node;    
			//尾部插入新进来的节点
			System.out.println("节点插入成功");
		}
	}
	
	public void addbyorder(HeroNode node) {
		//按照顺序插入新的节点 按照id的大小顺序排序
		//主要是要找到待插入位置的前一个节点
		HeroNode temp = head;      //辅助变量
		if(head.next==null)
		{
			head.next=node;
			System.out.println("节点"+node.name+"插入成功");
			return;
		}     //如果单链表中此时只有头结点,则直接将信赖的结点插入头结点之后
		while(temp.next!=null&&temp.next.id<node.id)
		{
			temp=temp.next;     //往下遍历下一个节点
		}
		if(temp.next==null)   //判断是否是链表到结尾了   两种情况要分别考虑 实现方法不一样
		{
			temp.next=node;
			node.next=null;
		}
		else {
			node.next=temp.next;
			temp.next=node;         //将节点插入temp节点之后 使之按照顺序排列
		}
		
		System.out.println("节点"+node.name+"插入成功");
		
	}
	//打印单链表的节点情况
	public void show() {
		HeroNode temp=head.next;
		System.out.println("现在开始打印节点:");
		while(temp!=null)
		{
			System.out.println(temp);
			temp=temp.next;
		}
	}
	
}




/*
 * 创建英雄节点 每一个 节点英雄都有编号 姓名 和昵称
 */
class HeroNode{
	public int id;
	public String name;
	public String nickname;
	public HeroNode next;       //节点中指向下一个节点的指针
	
	public HeroNode(int id,String name, String nickname) {
		// TODO Auto-generated constructor stub
		this.id=id;
		this.name=name;
		this.nickname=nickname;
	}

	@Override
	public String toString() {
		return "HeroNode [id=" + id + ", name=" + name + ", nickname=" + nickname + "]";
	}
	
}
  • 作者:code_bao
  • 原文链接:https://blog.csdn.net/qq_42013013/article/details/105181792
    更新时间:2022-09-05 11:26:48