java数据结构之单向链表(一)

java数据结构之单向链表(一)

前言

~说点题外话,刚进入工作,感觉还是挺累的,除去工作时间,还要抽取出一部分时间来进行学习,确实不容易呐,但没办法,既然选择这个行业,就只有不断学习来提升自己。
言归正传,这一小节主要是用java代码来实现一个简单的链表

1 链表概述

1.1 链表是什么?

古代由于科技的限制,但为了记录下曾经的重大事件,想出了一种方式,结绳记事。每当发生一件重大事情的时候就会在绳子上打上一个节点,久而久之,这个绳子就变成了一个储存事件的工具。这里的链表和结绳记事的原理是差不多的。
在阐述链表之前,先说下节点。节点分为两部分,一部分用来存储数据(data域),另一部分用来指向下一个节点(next域)。
将这些节点拼接起来就变成了一个链表,有头(data域)有尾(next域)。

1.2 链表和普通的存储数据的方式有什么不同呢?

普通的数据存储,每一个数据都是独立的,没有关联,而这里的链表则是将相邻的两个数据进行关联,从而形成链表。

2 链表的具体实现

2.1 代码的准备

~用java代码简单的实现链表的功能(不实现排序)

2.11 准备一个数据类

(1)data域:用来存放数据
(2)next域:用来指向向下一个节点

2.12 准备一个链表类

(1)用来做链表的初始化工作
(2)准备一个头结点(不存放数据,只用来指向下一个节点)
(2)能够实现链表的添加以及展示功能

3 上代码进行演示

package com.haiyi.linkedlist;

public class SingleLinkedListDemo {
	//进行测试
	public static void main(String[] args) {
		//创建节点
		HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨");
		HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟");
		HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星");
		HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头");
		//创建链表
		SingleLinkedList linkedList = new SingleLinkedList();
		linkedList.add(heroNode1);
		linkedList.add(heroNode2);
		linkedList.add(heroNode3);
		linkedList.add(heroNode4);
		linkedList.list();
	}

}

//链表
class SingleLinkedList {
	// 带有头结点的链表

	// 创建一个头结点,不用来存放数据,用来指向下一个
	public HeroNode head = new HeroNode(0, "", "");

	// 添加节点(要添加链表的最后)
	public void add(HeroNode node) {
		// 先判断链表是不是最后,根据next 是否为空进行判断
		HeroNode temp = head;
		// 对链表进行遍历,添加到链表的最后
		while (true) {
			// 是链表最后一个直接指向这个节点
			if (temp.next == null) {
				break;
			}
			// 不是链表最后一个,移动到下一个
			temp = temp.next;
		}
		temp.next = node;
	}
	// 遍历链表
	public void list() {
		// 除去第一个节点后,用来判断链表是否为空
		if (head.next == null) {
			System.out.println("链表为空");
			return;
		}
		// 遍历除去头结点之后的节点
		HeroNode temp = head.next;
		while (true) {
			// 节点为空直接结束
			if (temp == null) {
				break;
			}
			// 节点不为空,在进行输出
			System.out.println(temp);
			// 将节点后移,在进行判断
			temp = temp.next;
		}
	}
}
//定义一个 节点
class HeroNode {
	// data域用来存放数据
	public int no;
	public String name;
	public String nickName;
	// 相当于next域(指向下一个节点)
	public HeroNode next;
	public HeroNode(int no, String name, String nickName) {
		super();
		this.no = no;
		this.name = name;
		this.nickName = nickName;
	}

	@Override
	public String toString() {
		return "HeroNode [no=" + no + ", name=" + name + ", nickName=" + nickName + "]";
	}
}

4 演示结果

在这里插入图片描述

5 小结

(1)这一小结,主要是为了熟悉链表的概念,以及存储数据的方式,在接下来的几个章节中,我会对链表做详细的介绍。
(2)不足之处希望大家指出来,共同进步。纯手打,希望分享的这点经验能够帮助到大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值