链表(LinkedList)概述:链表与数组一样属于一种数据结构。数组是要先确定存放的长度大小,数据的存放是有序可重复的。而链表有初始长度,后续可以根据添加的元素自动扩容,数据的存放是无序可重复。
链表的存储方式:以节点的方式来存储;节点的组成:每个节点由一个date域(存储数据)和一个next域(指向下一个节点)组成;链表的分类:有头节点(单向/双向 链表)、无头节点(循环链表)。
链表创建:
public class LinkedListDemo_Review {
public static void main(String[] args) {
Node node1 = new Node(1,"张三");
Node node2 = new Node(2,"李四");
Node node3 = new Node(3,"王五");
//实例化链表
SingleLinkedList slist = new SingleLinkedList();
//调用添加方法
slist.add(node1);
slist.add(node2);
slist.add(node3);
//调用显示方法
slist.List();
}
}
//2、创建单向链表
class SingleLinkedList{
//定义头节点
Node HeadNode = new Node(0,"");
//创建添加方法
//思路:从链表最后添加,需要找到链表最后则使用遍历循环判断
public void add(Node node){
//定义辅助头节点
Node temp = HeadNode;
while(true){
//首先考虑到直接就是最后一个节点,则跳出循环
if (temp.next == null){
break;
}
//不是链表最后一位则继续后移,继续遍历判断
temp = temp.next;
}
//当跳出循环表示已经找到链表最后一位,则直接链接节点即可
temp.next = node;
}
//创建显示方法
//思路:如果为空则直接返回跳出方法;不为空则遍历输出
public void List(){
//定义辅助头节点
Node temp = HeadNode;
if (temp.next == null){
System.out.println("链表为空");
return;
}
while(true){
//判断是否到了链表最后,如果是最后则退出
if (temp.next == null){
break;
}
//没到结尾则遍历输出链表的节点
System.out.println(temp.next);
//每次输出完之后往后移一位,避免死循环
temp = temp.next;
}
}
}
//1、创建节点
class Node{
//定义属性
public int no;
public String name;
//定义节点
public Node next;
public Node(int no, String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "Node{" + "no=" + no + ", name=‘" + name + ‘\‘‘ + ‘}‘;
}
}
原文:https://www.cnblogs.com/plus666/p/13742594.html