前言
链表是一种简单的数据结构,是非顺序,非连续的存储结构。数据元素的连接通常通过结点中的指针来实现
一、链表是什么?
链表是一种简单的数据结构,是非顺序,非连续的存储结构。数据元素的连接通常通过结点中的指针来实现,链表中的结点往往包括数据域和指针域
二、单链表的创建
1.如何创建一个链表结点
代码如下(示例):
/**
*声明一个类,包含Data(数据域),next(指针域):指向下一个结点
*/
class Node{
public int data;
public Node next;
//声明构造器
public Node(int data){
this.data=data;
}
public Node(){
}
@Override
public String toString(){
return "["+"data="+data+"next====>" +next;
}
}
2.如何在链表中实现元素增删查改
代码如下(示例):
/**
* 先创建一个链表类
*
*/
class NodeList{
//创建头结点
Node head=new Node("0");
}
实现查看此链表的操作
public void showList(){
//创建中间变量用来遍历链表
//先判断链表是否为空
if(head.next==null){
System.out.println("链表为空");
}
//注意:因为头结点为空,所以从下一个结点开始遍历
Node temp=head.next;
while(true){
if(temp==null)
break;
}
else{
System.out.println(temp);
temp=temp.next;
}
}
}
实现增加元素结点操作
public void add(int n){
//创建一个新结点
Node n=new Node(n);
//创建一个结点用来遍历链表,找到链表的尾部
//这个结点从链表的头部开始遍历
Node temp=head;
//进行循环直到找到尾结点:判断尾结点就是指针域为Null
while(true){
//当遍历结点遍历到尾部以后,跳出循环,进行添加结点的操作
if(temp.next==null){
//注意:此处必须为为temp.next==null时跳出循环,
//因为如果时Temp==null时,此时会没有结点指向temp,无法将其链接
break;
}
temp=temp.next;
}
//将新节点位置赋值给temp
temp.next=n;
n.next=null;
}
实现删除结点的操作
public void delete(int n){
//先判断链表是否为空
if(head.next==null){
System.out.println("链表为空");
}
//创建中间变量用于遍历链表
Node temp=head;
//用于确认是否找到含有n的结点
boolean flag=false;
//注意:单链表进行删除结点的售后需要借助上一个结点进行删除
//当我们学习到了双链表结构的时候可以实现自我删除
while(true){
if(temp.next==null){
break;}
if(temp.next.n==n){
//当找到了含有N的结点则修改状态值,并且跳出循环
false=true;
break;
}else
temp=temp.next;
}
//进行删除操作
if(flag){
temp.next=temp.next.next;
}else{
System.out.println("链表中没有此元素");}
}
实现修改结点的操作
public void update(int n){
//先判断链表是否为空
if(head.next==null){
System.out.println("链表为空");
}
//进行修改操作时我们应该遍历链表找到需要修改的结点,然后进行修改
//遍历链表
Node temp=head;
boolean flag=false;
while(true){
if(temp.next==null){
break;
}
if(temp.next.n==n){
flag=true;
break;
}
}
if(flag){
temp.next.n=n;
}else
System.out.println("链表中没有这个结点");
}