大家一起学数据结构之单链表

最近工作上得一些感触,要想不当码农学好数据结构是必须滴
好了,话不多说,下面开始第一个内容 单链表
一、先来介绍下单链表得结构吧

在这里插入图片描述
大概就这样了,别嫌丑。
单链表有带头结点得和不带头结点得,其中每个节点有一个指向下一个节点得next指针。之后一个节点得next指针指向null。
二、下面上代码,讲讲怎么用java实现一个单链表
首先定义节点

// 定义HeroNode ,每个HeroNode对象就是一个节点
class HeroNode {
	public int no;//编号
	public String name;
	public String nickName;
	public HeroNode next;//指向下一个节点

	public HeroNode(int no, String name, String nickName) {
		this.no = no;
		this.name = name;
		this.nickName = nickName;
	}

	// 为了显示,重写toString
	@Override
	public String toString() {
		return "HeroNode [no=" + no + ", name=" + name + ", nickName=" + nickName +  "]";
	}

}

接下来就是有意思得部分啦,我们去定义一个单链表得类,要想链表成形,我们当然得往里面添节点啦。(我这讲得是带头节点得单链表)

// 定义singleLinkedList链表,管理节点
class SingleLinkedList {
	// 初始化头节点,不存放任何数据
	private HeroNode head = new HeroNode(0, "", "");

	/**
	 * 添加节点到单链表 思路: 不考虑编号顺序时: 
	 * 1、找到当前链表的最后节点 2、将最后这个节点的next指向新的节点
	 * 
	 * @param heroNode
	 */
	public void addNode(HeroNode heroNode) {
		// 因为head节点不能动,因此我们需要一个辅助遍历temp
		HeroNode temp = head;
		// 遍历链表找到最后
		while (true) {
			if (temp.next == null) {
				break;
			}
			// 如果未找到将temp后移
			temp = temp.next;
		}
		// 当退出循环temp指向链表最后
		temp.next = heroNode;
	}

接下来是显示这个单链表,方法很简单遍历,打映就是啦。

/**
	 * 显示链表
	 */
	public void showlink() {
		if (head.next == null) {
			System.out.println("链表为空");
			return;
		}

		HeroNode temp = head.next;
		while (true) {
			// 判断是否到链表最后
			if (temp == null) {
				break;
			}
			System.out.println(temp.toString());
			// 将指针后移
			temp = temp.next;
		}
	}
}

下面是测试方法。

public static void main(String[] args) {
		//测试
		//先创建节点
		HeroNode heroNode1 = new HeroNode(1, "松江", "及时雨");
		HeroNode heroNode2 = new HeroNode(2, "wyy", "zdx");
		HeroNode heroNode3 = new HeroNode(3, "fw", "gggg");
		HeroNode heroNode4 = new HeroNode(4, "lc", "bzt");
		
		//加入节点
		SingleLinkedList linkedList = new SingleLinkedList();
		linkedList.addNode(heroNode1);
		linkedList.addNode(heroNode4);
		linkedList.addNode(heroNode2);
		linkedList.addNode(heroNode3);
		//显示节点
		linkedList.showlink();
		
	}

好啦,这个往里无序添加得单链表就讲到这啦。详细得请看下期有序插入节点得单链表。

展开阅读全文
©️2020 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值