数据结构——链表的学习总结与java实现

本文详细介绍了链表这一基础数据结构,包括单链表、循环链表和双链表的定义、特点及基本操作。通过Java实现链表操作,帮助读者深入理解链式存储结构。
摘要由CSDN通过智能技术生成

链表

链表是一个常见的基础数据结构,可以理解为一种线性表,是一种物理存储单元上非连续、非顺序的存储结构。也可以称之为链式存储的线性表,链表是由多个链表元素(节点)组成,二节点之间通过逻辑连接,这样就形成了链式存储结构。
在这里插入图片描述
链表可以分为两个域:
1、数据域(值域):用来存储节点的值
2、指针域(链域):用来存储其后节点的地址或位置
下面我将对自己学过的链表做一个复习与总结,只是单纯的为了以后能够随时复习,它的存在相当于一个笔记的形式。

单链表

1、单链表的的每个节点只有一个next指针域,它是一种顺序存储结构。
2、单链表中每个节点的存储地址存放在其前驱节点(也就是上一个节点)的指针域中,那么问题来了,第一个节点前面没有节点了,所以应该设一个头指针H指向第一个节点。
3、同理,最后一个节点没有直接后继节点了,所以指定单链表的最后一个节点的指针域为空(NULL)。
4、单链表的头指针H标志着整个单链表的开始,所以必须得先知道头指针,才能够顺着每个节点的next指针域去得到单链表中的每个元素。
5、在单链表中要找到第N个节点或者数据元素,必须先找到第N-1个节点,通过它的指针域去拿到N的信息。
6、单链表只可向一个方向遍历。
7、有时候为了操作的统一方便,可以给单链表增加一个头结点,这个头结点数据域存储一些关于线性表的长度等附加信息,指针域用来存储指向第一个结点的指针,也就变成了H —> 头结点数据域/指针域 —> 第一个结点数据域/指针域…
在这里插入图片描述

单链表的基本操作

可以在单链表上执行各种操作,下面将介绍这些基本操作和实现。

package demo2;
	//一个节点
public class Node {
   
	//节点内容
	int data;
	//下一个节点
	Node next;
	
	public Node(int data) {
   
		// TODO Auto-generated constructor stub
		this.data=data;
	}
	
	//为节点追加节点
	public Node append(Node node) {
   
		//this.next=node;
		//当前节点
		Node currentNode=this;
		//循环向后找
		while(true) {
   
			//取出下一个节点
			Node nextNode=currentNode.next;
			//如果下一个节点为null
			if(nextNode==null) {
   
				break;
			}
			//赋给当前节点
			currentNode=nextNode;
		}
		//把需要追加的节点添加到找到的当前节点
		currentNode.next=node;
		return this;
	}
	//插入一个节点作为当前节点的下一个结点
	public void after(Node  node) {
   
		//取出下一个节点
		Node nextNext=next;
		//把当前结点作为当前节点的下一个节点
		this.next=node;
		//把下下一个节点设置为新节点的下一个节点
		node.next=nextNext;
		
	}
	
	//显示所有节点的信息
	public void show() {
   
		Node currentNode=this;
		while(true) {
   
			System.out.println(currentNode.data+"  ");
			currentNode=currentNode.next;
			//如果是最后一个节点
			if
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值