单链表的结构
链表是一种在物理上非连续、非顺序的数据结构,由若干节点(node)所组成。
单向链表的每一个节点又包含两部分,一部分是存储数据的变量data,另一部分是指向下一个节点的指针next。
public clss Node{
int data;//数据
Node next;//下一个节点的地址
public Node (int data) {//构造函数给data赋值
this.data = data;
}
}
链表的第一个节点被称为头节点(图中的Head),最后一个节点被称为尾节点,尾节点的next指针指向空(NULL)。
运用《小灰算法之旅》的话就是:正如地下党的联络,一级一级,单线传递。
public class Solution {
public static void main(String[] args) {
Node node = new Node(7);
Node node1 = new Node(5);
node.next = node1;//值传递
}
}
由代码块1和代码快2可以画图来表示
简单来表示就是
以此类推就可以多个相连
当然,因为main方法弹栈的原因,导致创建内存区无效,不方便管理和维护
为了方便管理,我们创建一个新的类
单链表的输入和输出
1.创建节点类
//在堆内存中创建节点
public class ListNode {
public int value; // 数据域
public ListNode next; // 下一个地址的节点域
public ListNode(int value){
this.value = value;
}
}
2.创建管理类
// 链表的管理类
public class LinkList {
ListNode head = null;//初始默认值
//写一个方法,创建链表,链表的插入方法
public void insert(int value){
ListNode listNode = new ListNode(value);
if (head == null){
head = listNode;//值传递
return;
}
ListNode tempNode = head;
while (tempNode.next !=null){
tempNode = tempNode.next;
}
tempNode.next = listNode;
}
// 输出链表的值
public void printLink(){
//定义游标指向链表当中的第一个节点
ListNode tempNode = head;
while (tempNode !=null){
System.out.println(tempNode.value);
tempNode = tempNode.next;
}
}
}
3.创建一个demo类
输入
public class demo {
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.insert(5);
linkList.insert(7);
linkList.insert(8);
linkList.insert(9);
linkList.printLink();
}
}
4.流程图
总结
管理类的思路顺序为:
1.先创建头部初始默认值为空
2.给Listnode创建内存并赋值
3.第一步先if判断一下头部是否为null
4.定义指针tempNode,赋值
5.while循环tempNode地址不为空
6.最后tempNode传递给listNode,最后一个指向空,结束
7.然后定义游标指向链表的第一个节点,在demo调用printLink
8.当tempNode不为空的时候,输出value的值和地址,一直到最后一个指向空
自己理解自己懂了,可能别人看不懂。。。自己理解的最后一幅图