单链表添加节点的实现思路

单链表是一种链式存储结构,主要分为数据域和指针域。
方式也有带头结点和不带头节点,两种方式主要取决于实际情况。

eg: 这里采用带头结点的方式来进行如下的编程
(1) 按尾插法的方式来添加节点;

// 按照尾插法来添加数据
public class SingleLinkedListTest {
	public static void main(String[] args) {
		HeadNode node1 = new HeadNode(1, "lbb", 23);
		HeadNode node2 = new HeadNode(2, "whr", 22);
		HeadNode node3 = new HeadNode(3, "ybr", 21);
		HeadNode node4 = new HeadNode(4, "wyr", 25);
		HeadNode node5 = new HeadNode(5, "zxc", 24);
		HeadNode node6 = new HeadNode(4, "qyh", 25);

		SingleLinkedList link = new SingleLinkedList();
		link.addLinkNode(node1);
		link.addLinkNode(node2);
		link.addLinkNode(node5);
		link.addLinkNode(node4);
		link.addLinkNode(node3);
		link.showNode();
	}

}

// 添加后继节点
class SingleLinkedList {
	// 头节点信息
	private HeadNode head = new HeadNode(0, "", 0);

	// 使用尾插法来添加节点信息
	public void addLinkNode(HeadNode node) {
		HeadNode temp = head;
		while (true) {
			// 判断是否为最后一个节点
			if (temp.nextList == null) {
				break;
			}
			// 否则,向后移动
			temp = temp.nextList;
		}

		temp.nextList = node; // 将末尾指针指向新节点
	}
	// 遍历节点信息
	public void showNode() {
		HeadNode temp = head.nextList;
		if (temp == null) {
			return;
		}
		while (temp != null) {
			System.out.println(temp);
			temp = temp.nextList;
		}

	}
}

// 创建头节点信息(数据域)
class HeadNode {
	public int no;
	public String name;
	public int age;
	public HeadNode nextList;

	public HeadNode(int no, String name, int age) {
		this.no = no;
		this.name = name;
		this.age = age;
	}

	// 重写toString()方法
	public String toString() {
		return "[ no:" + no + ", name:" + name + ", age:" + age + " ]";
	}
}

(2) 按自己的需求来指定输出的先后顺序。

// 在SingleLinkedList 中重写添加方法即可。
// 按照指定需求来添加节点
	public void addByOrder(HeadNode node1) {
		// 头节点不能动
		// 新加入的节点,按照编号顺序来查找要添加的位置
		HeadNode temp = head;
		boolean flag = false;

		while (true) {
			if (temp.nextList == null) {
				break;
			}
			if (temp.nextList.no == node1.no) {
				flag = true;
				break;
			}else if (temp.nextList.no > node1.no) {
				break;
			}
			temp = temp.nextList;
		}
		if (flag){
			System.out.printf("存在相同节点,不能再添加,no为%d,名字为%s的信息!!\n", node1.no, node1.name);
			return;
		}else
		{
			node1.nextList = temp.nextList;
			temp.nextList = node1;
		}
		
		
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值