单链表+单链表代码(链表最基础)

链表

链表是有顺序的表,在内存中存储:
在这里插入图片描述

  1. 链表是以节点的方式存储的
  2. 每个节点包括data域,next域:指向下一个节点
  3. 如图:发现链表的各个节点不一定是连续存放的,有跳跃的,不是连续存储
  4. 链表分为带头节点的链表和没有头结点的链表
    在这里插入图片描述
    添加:
    1.先创建一个head头结点,作用就是单链表的头
    2.后面每添加一个节点,就直接加入到链表最后
    遍历:

代码

添加节点到链表里:
这里借助于temp节点,通过循环找到链表的最后

	/*
	 * 函数:添加节点到单向链表 思路:当不考虑编号的顺序时 找到当前的链表的最后一个节点,将最后节点的next指向新的节点
	 */
	public void add(HeroNode heroNode) {

		// 因为head头节点不能动,我们需要一个辅助遍历temp
		HeroNode temp = head;
		// 遍历链表,找到最后
		while (true) {
			// 找到的链表的最后
			if (temp.next == null) {
				break;
			}
			// 如果没找到最后,就将temp后移
			temp = temp.next;
		}
		temp.next = heroNode;
	}

显示出链表所有节点:
通过遍历的方法,最后一个节点的next是NULL

// 显示链表[遍历]
	public void showList() {
		// 判断链表是否为空
		if (head.next == null) {
			System.out.println("链表为空");
			return;
		}
		// 因为head头节点不能动,我们需要一个辅助遍历temp
		HeroNode temp = head.next;
		while (true) {
			// 判断是否到链表最后
			if (temp == null) {
				break;
			}
			// 输出节点信息
			System.out.println(temp.toString());
			// 将temp后移,一定注意
			temp = temp.next;
		}

	}

**注意这里还要重写方法toString,**不重写该方法会打印出
getClass().getName() + “@” +Integer.toHexString(hashCode());就是:类名 + @ +hashCode的值
注意重写tostring方法的时候,不应该打印出

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

整个代码:

package com.suanfa;

public class SingleLinkedListDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 进行测试
		// 先创建节点
		HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
		HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
		HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
		HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
		// 创建链表
		SingleLinkedList singleLinkedList = new SingleLinkedList();
		// 加入
		singleLinkedList.add(hero1);
		singleLinkedList.add(hero2);
		singleLinkedList.add(hero3);
		singleLinkedList.add(hero4);

		singleLinkedList.showList();

	}

}

//定义SingleLinkedList 管理我们的英雄
class SingleLinkedList {
	// 先初始化一个头结点,头节点不要动,且不存放具体数据
	private HeroNode head = new HeroNode(0, "", "");

	/*
	 * 函数:添加节点到单向链表 思路:当不考虑编号的顺序时 找到当前的链表的最后一个节点,将最后节点的next指向新的节点
	 */
	public void add(HeroNode heroNode) {

		// 因为head头节点不能动,我们需要一个辅助遍历temp
		HeroNode temp = head;
		// 遍历链表,找到最后
		while (true) {
			// 找到的链表的最后
			if (temp.next == null) {
				break;
			}
			// 如果没找到最后,就将temp后移
			temp = temp.next;
		}
		temp.next = heroNode;
	}

	// 显示链表[遍历]
	public void showList() {
		// 判断链表是否为空
		if (head.next == null) {
			System.out.println("链表为空");
			return;
		}
		// 因为head头节点不能动,我们需要一个辅助遍历temp
		HeroNode temp = head.next;
		while (true) {
			// 判断是否到链表最后
			if (temp == null) {
				break;
			}
			// 输出节点信息
			System.out.println(temp.toString());
			// 将temp后移,一定注意
			temp = temp.next;
		}

	}
}

//定义一个HereoNode
class HeroNode {
	public int no;
	public String name;
	public String nickname;
	public HeroNode next;// 指向下一节点
	// 定义构造器

	public HeroNode(int hNo, String Hname, String Hnickname) {
		this.no = hNo;
		this.name = Hname;
		this.nickname = Hnickname;

	}

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

}
版权声明:本文为awodwde原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/awodwde/article/details/107530992

智能推荐

Springboot整合rabbitMQ

依赖: 配置文件application.yml RabbitConfig 消息生产者RabbitProducer 消息消费者RabbitCustomer 通过Controller进行调用 启动项目后调用接口: 结果:...

Thread.join()方法的使用

如果一个线程A执行了thread.join()语句,代表当前线程A等待thread线程终止后才从thread.join()方法返回 并且这个方法具有超时特性,可以添加参数设置 输出结果: jdk中Thread.join()方法的源码(进行了部门调整)   每个线程终止的条件是前驱线程的终止,每个线程等待前驱线程终止后,才从join()方法返回,  当线程终止时,会调用自身的no...

linux服务器部署jenkins笔记

安装jenkins参考文档:https://blog.csdn.net/tomatocc/article/details/83930714 1. 打开jenkins官网:https://jenkins.io/download/ 将war包下载到本地 **ps:**这里要注意的是要下载左边下方的war包,不要下载右边下面的war包。左边是稳定版本,右边是最新版本,建议大家使用稳定版本(我刚开始下载的...

k8s部署elasticsearch集群

百度营销大学     环境准备 我们使用的k8s和ceph环境见: https://blog.51cto.com/leejia/2495558 https://blog.51cto.com/leejia/2499684 ECK简介 Elastic Cloud on Kubernetes,这是一款基于 Kubernetes Operator 模式的新型编排产品,用户可使用该产品在...

saas-export项目-AdminLTE介绍与入门

AdminLTE介绍 (1)AdminLTE是什么? AdminLTE是一款建立在bootstrap和jquery之上的开源的模板主题工具 (2)AdminLTE有什么特点? 提供一系列响应的、可重复使用的组件, 并内置了多个模板页面 自适应多种屏幕分辨率,兼容PC和移动端 快速的创建一个响应式的Html5网站 AdminLTE 不但美观, 而且可以免去写很大CSS与JS的工作量 AdminLTE...

猜你喜欢

MyBatis中ResultMap结果集映射

用于解决属性名和字段名不一致的情况: resultMap 元素是 MyBatis 中最重要最强大的元素。...

编写一个shell

编写shell的过程: 1.从标准输入中读入一个字符串。 2.解析字符串 3.创建一个子进程的执行程序。 4.子进程程序替换。 5.父进程等待子进程退出。...

WEB自动化测试中Xpath定位方法

前言: Xpath是在XML文档中查找信息的一种语言,使用路径表达式来选取XML文档中的节点或节点集,由于XML与HTML结构类似(前者用于传输数据,后者用于显示数据),所以Xpath也常用于查找HTML文档中的节点或节点集。 一  路径表达式: 路径以“/”开始     表示找到满足该绝对路径的元素; 路径以//”开始  ...

力扣困难难度 第4题 寻找两个正序数组的中位数

先看一眼题 我的思路: 设置下标i,j分别用于遍历两个数组,初始值均为0,直到找到两个数组中从小到大的第第length/2个数为止结束循环,length为两个数组长度之和。 ·每次比较nums[i]nums[j],如果前者小则i++,否则j++ ·循环结束时,如果count已经达到length/2,则说明已经找到了中位数,[注意:此时有可能正好其中一个数组遍历完了!所以...

[国家集训队]小Z的袜子(莫队)

[国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这NN只袜子从1到NN编号,然后从编号LL到RR(LL 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同...