| 
 
| 本帖最后由 鸭鸭鸭鸭 于 2019-2-28 15:58 编辑 
 Java数据结构-单链表的实现
 
 概述
 
 借用知乎网友的一句话:如果说 Java 是自动档轿车,C 就是手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。但若你此生在编程领域还有点更高的追求,数据结构是绕不开的课题。
 数据结构中有许多种类型,而且实现的语言也有C 也有java.今天我们来讲讲 单链表的java实现添加节点。
 
 单链表概述
 
 
 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
 
 单链表的实现原理
 
 
 
   
 说明:在单链表中,我们定义一个节点Node 包括两个部分:元数据和下一个节点的地址。节点和节点之间 通过next(即下一个节点的地址)来进行关联,这样就形成了一个链式结构。我们很轻易的就能从头(head)结点一直遍历到最后边的节点。这种结构有点像铁锁一样环环相扣。
 
 单链表的java实现
 
 实现数据结构的语言可以有很多,这里我们介绍使用java语言来实现。
 
 实现添加向链表中添加节点的步骤
 
 
 定义单链表对象并在内部定义一个节点对象Node实现向单链表对象中添加节点的功能测试
 定义单链表对象
 
 package com.itheima.link;
 /**
 * 单列表
 * @title SingleLink.java
 *            <p>
 *            description
 *            </p>
 *            <p>
 *            company: www.itheima.com
 *            </p>
 * @author 三国的包子
 * @version 1.0
 *
 *
 */
 public class SingleLink {
 // 结点对象
 class Node {
 Object data;// 数据
 Node next;// 下一个节点的地址引用
 
 // 构造函数 获取数据
 public Node(Object data) {
 this.data = data;
 }
 }
 Node head;// 表示链表的头结点
 }
 
 在SingleLink中增加添加节点的方法
 
 /**
 * 从尾部添加一个节点
 *
 * @param data
 *                       要添加的节点的数据
 */
 public void add(Object data) {
 // 1.构建一个节点对象
 Node node = new Node(data);
 if (head == null) {
 // 2.判断链表中是否为空 如果为空 则新增的节点变成头节点
 head = node;
 } else {
 // 3.如果链表不为空,则需要查询到尾部节点
 Node rear = findRearNode();
 // 4.向尾部节点添加一个节点
 rear.next = node;// rear肯定不为空
 }
 }
 /**
 * 找到尾部节点
 *
 * @return
 */
 private Node findRearNode() {
 // 从头开始遍历
 // 1.定义一个临时变量 让其等于头
 Node temp = head;
 while (temp != null) {// 如果不等于空继续遍历
 if (temp.next == null) {// 如果接的next的属性为空说明 该节点为尾部节点
 break;// 跳出循环
 }
 temp = temp.next;// 遍历下一个
 }
 return temp;
 }
 
 重写toString 方法用于测试
 
 // 重写方法 打印数据
 @Override
 public String toString() {
 StringBuffer stringBuffer = new StringBuffer("[");
 // 遍历
 Node temp = head;
 while (temp != null) {
 if (temp.next == null) {
 stringBuffer.append(temp.data);
 break;
 } else {
 stringBuffer.append(temp.data + ",");
 }
 temp = temp.next;
 }
 stringBuffer.append("]");
 return stringBuffer.toString();
 }
 
 测试
 
 public class TestLink {
 public static void main(String[] args) {
 SingleLink singleLink = new SingleLink();
 singleLink.add(1);
 singleLink.add(2);
 singleLink.add(3);
 
 System.out.println(singleLink);
 }
 }
 
 测试效果
 输出结果如下:
 [1,2,3]
 
 总结
 
 
 通过上边的例子,我们构建了一个链表对象 并向链表对象中添加了一些元素,模拟了集合中添加元素的方法。简单的入门就到这里了,这帮助我们去理解。另外查询节点的方法,可以通过节点图来理解即可。另外还有些链表的操作方法,我会陆续实现。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 
 |