本文共 1365 字,大约阅读时间需要 4 分钟。
为了防止自己遗忘,将现在还理解的单链表记录下来。
单链表具体是什么呢?
最根本的就是将你要储存的数据分成两个部分,一部分用来存储输入的数据,一部分存储下一个数据的地址那么我们每个存储值的块就需要分隔成两个部分,一部分存储数据一部分存储下个块的地址
这样我们需要建立一个node类然后里面有两个成员变量,一个是date用来存放数据,一个是next用来存放下一个值的地址。然后我们建立一个构造函数,测试的时候直接将值传过来。
public class Node { public Object date; //存放数据 public Node next; //存储下一个数据的地址 public Node(Object date) { this.date = date; }
这样测试类创建新的对象的时候内存里面就有两个区域,一个存储数据,一个存储下一个地址。
接下来我们开始实现添加功能,首先我们需要建立一个链表类,它的成员变量就是第一个头结点
这里提一下头结点,它的作用就是存储第一个块的地址,其他的什么都不需要它干,这样我们只需要知道头结点就可以知道下面所有结点存储的内容了。
介绍完了头结点之后,我们开始创建添加结点的方法,我们需要在测试类添加数据的时候顺便建立新的对象,这样我们需要我们的添加方法需要接收到具体我们添加的东西。
public Node head ; //初始化头结点 public void addNode(Object obj) { Node node = new Node(obj); }
这样测试类添加数据的时候就会直接创建对象,下面我们开始实现如何存储下一个结点的地址。
首先我们应该考虑一下我们应该怎么添加结点,正常思路下我们只需要一节一节的添加下去就可以,这里我用另一种添加方式就是从头开始添加
这是正常的添加方式
这是我的添加方式,为了加强表现才会存在head还在指向第二个结点。
这是head存着的就是添加结点的下一个结点的地址,这样我们就需要将head的地址给添加结点,然后将添加结点的地址给head
public void addNode(Object obj) { Node node = new Node(obj); /* * 串接到head */ node.next = head;//将原本head指向的地址赋给新加入的 head = node;//将这个新加入的地址赋给head }
这样最后一个地址永远是null的了,知道了这点我们就可以开始写遍历了
public void print() { Node temp = head;//建立一个游标,第一个游标指向头数据 while(temp!=null) { System.out.println(temp.date); temp = temp.next; //游标后移 } }
这里建立的temp充当一个指针的作用,创建node属性的它,这样他就也有date和next的两个属性了。
然后第一步现将head给他,然后我们就开始遍历了。只要temp里面不是null就打印,顺便还能游标后移这里记录一下,防止自己的狗脑子又忘了。
转载地址:http://zhlwi.baihongyu.com/