链表
链表作为一种数据结构比起数组来没有固定长度用起来很方便很灵活。用一个引用来指向下一个元素。
1.思路
先创建一个节点(这里使用学生节点作为例子)学生有学号和姓名,用学号来标识学生的唯一性,在加上一个指向下一个学生的引用。然后重写学生的toString()方法。注意:toString()方法里面别带上next。
package link;
public class LinkStudent {
int no;
String name;
LinkStudent next;
public LinkStudent(int no , String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "LinkStudent [no=" + no + ", name=" + name + "]";
}
}
接着创建一个类来实现链表的增删改查
package link;
public class Linkst {
LinkStudent head = new LinkStudent(0 , " ");
// 按照no的顺序添加元素
public void add(LinkStudent ls) {
LinkStudent temp = head;
boolean flag = false;
while(true) {
if(temp.next == null) {
break;
}
if(temp.next.no == ls.no) {
flag = true;
break;
}
else if(temp.next.no > ls.no) {
break;
}
temp = temp.next;
}
if(flag) {
System.out.println("这个编号已经重复了"+temp.no);
}else {
ls.next = temp.next;
temp.next = ls;
}
}
// 查看链表中的元素通过循环来遍历这个链表
public void see() {
LinkStudent temp = head;
while(true) {
if(temp.next == null) {
break;
}
System.out.println(temp.next);
temp = temp.next;
}
}
// 根据no修改链表中的元素
public void update(LinkStudent ls) {
LinkStudent temp = head;
boolean flag = false;//用来标记链表中是否有这个元素
while(true) {
if(temp.next == null) {
flag = true;
break;
}
if(temp.next.no == ls.no) {//必须指向要修改元素的上一个节点
break;
}
temp = temp.next;
}
if(flag) {
System.out.println("没有找到这个编号");
}
ls.next = temp.next.next;
temp.next = ls;
}
// 根据no删除链表中的元素
public void del(int n) {
LinkStudent temp = head;
boolean flag = false;
while(true) {
if(temp.next == null) {
flag = true;
break;
}
if(temp.next.no == n) {
break;
}
temp = temp.next;
}
if(flag) {
System.out.println("没有找到这个编号");
}
temp.next = temp.next.next;
}
}
注意点
比如修改和删除操作当引用指向要操作元素的上一个元素就得停下来了要不然操作不了这个元素
验证
package link;
public class Demo {
public static void main(String[] args) {
LinkStudent ls = new LinkStudent(1 , "昊奇");
LinkStudent ls1 = new LinkStudent(3 , "正旺");
LinkStudent ls2 = new LinkStudent(4 , "坤坤");
LinkStudent ls3 = new LinkStudent(2 , "国清");
LinkStudent ls4 = new LinkStudent(2 , "赵稳");
Linkst l = new Linkst();
l.add(ls);
l.add(ls1);
l.add(ls2);
l.add(ls3);
l.see();
l.update(ls4);
l.see();
l.del(1);
l.see();
}
}