单向链表是通过指针构建的列表,基本结构就是头节点+下一节点地址指针--->节点+下一节点地址指针--->尾节点。
简单来说,链表就是通过一个个数据包(结构)通过引用连接在一起。
下面我们具体来实现一下:
定义节点:
public class ListNode {
//节点值
int val;
//下一节点指针
ListNode next;
//无参构造
public ListNode() { }
//有一个参数的构造器
public ListNode( int val) {
this.val = val;
}
//两个参数的构造器
public ListNode( int val ,ListNode next) {
this.val = val;
this.next = next;
}
节点里面需要什么类型数据,可以自己依据情况添加。
实现单链表:
public class SingleLinkedList {
//初始化头结点
ListNode head = new ListNode();
//添加(末尾添加)
public void add(int val) {
ListNode temp = head;
while(true) {
if(temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = new ListNode(val);
}
//按照要求添加(在第几个节点添加 传入下标,传入节点值)
public void insert(int index,int val) {
ListNode temp = head;
int num = 0;//用于累计节点数,确定新节点的违建
while(true) {
num++;//每循环一次++
if(temp.next == null) {//如果头结点的后继为null
//直接跳出
break;
}
if(num >= index) {
break;
}
temp = temp.next;
}
ListNode pNode = new ListNode(val);//新创建一个节点
pNode.next= temp.next;//将temp的后继赋值给新节点
temp.next = pNode; //将新节点赋值给temp的后继
}
public void show(SingleLinkedList list) {//输出链表
ListNode temp = list.head.next;
while(temp.next != null) {
System.out.println(temp.val);
temp = temp.next;
}
System.out.println(temp.val);//输出最后一个节点的值
}
}
这里只是简单写了两个功能。