先创建一个简单的实体类
class Data{
private int id;
private String name;
private Data next; //代表下一个节点,如果没有下一个节点,则为空
public Data(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Data getNext() {
return next;
}
public void setNext(Data next) {
this.next = next;
}
@Override
public String toString() {
return "Data [id=" + id + ", name=" + name + "]";
}
然后写一个存放数据的链表类
class SingleList {
//创建一个头节点,后面的数据将添加到头节点的后面
private Data head = new Data(0, "");
//显示链表
public void show() {
if(head.getNext() == null) {
System.out.println("链表为空");
return;
}
Data temp = head; //特别注意的是头节点不能动,否则会改变链表结构,创建一个辅助节点遍历链表
while(temp.getNext() != null) {
temp = temp.getNext(); //将节点后移
System.out.println(temp);
}
}
//将数据直接添加到链表末尾
public void add(Data newData) {
Data temp = head; //头节点不能动,否则会改变链表结构,创建一个辅助节点遍历链表
while(temp.getNext() != null) {
temp = temp.getNext();
}
temp.setNext(newData);
}
//根据ID大小添加数据,小在前,大在后
public void addByID(Data newData) {
Data temp = head;
boolean flag = false; //给定一个标识符,判断该节点是否存在
while(temp.getNext() != null) {
if(temp.getNext().getId() > newData.getId()) {
break;
}else if(temp.getNext().getId() == newData.getId()){
flag = true;
break;
}
temp = temp.getNext();
}
if(flag) {
System.out.println("编号为"+newData.getId()+"已存在,无法再次添加");
}else {
newData.setNext(temp.getNext());
temp.setNext(newData);
}
}
//根据ID删除数据
public void del(int id) {
if(head.getNext() == null) {
System.out.println("链表为空,无法删除");
return;
}
Data temp = head;
boolean flag = false;
while(temp.getNext() != null) {
if(temp.getNext().getId() == id) {
flag = true;
break;
}
temp = temp.getNext();
}
if(flag) {
temp.setNext(temp.getNext().getNext());
}else {
System.out.println("未找到id为"+id+"的数据");
}
}
//根据ID修改名称
public void edit(Data newData) {
if(head.getNext() == null) {
System.out.println("链表为空无法修改");
return;
}
Data temp = head;
boolean flag = false;
while(temp.getNext() != null) {
if(temp.getNext().getId() == newData.getId()) {
flag = true;
break;
}
temp = temp.getNext();
}
if(flag) {
temp.getNext().setName(newData.getName());
}else {
System.out.println("为找的id为"+newData.getId()+"的名称");
}
}
}
写一个主类用来调试代码
public class SingleListDemo {
public static void main(String[] args) {
Data data1 = new Data(1, "aa");
Data data2 = new Data(2, "bb");
Data data3 = new Data(3, "cc");
Data data4 = new Data(4, "dd");
SingleList singleList = new SingleList();
// System.out.println("不考虑ID直接添加");
// singleList.add(data1);
// singleList.add(data2);
// singleList.add(data3);
// singleList.add(data4);
System.out.println("考虑ID添加");
singleList.addByID(data3);
singleList.addByID(data1);
singleList.addByID(data4);
singleList.addByID(data2);
singleList.show();
// singleList.del(2);
// System.out.println("删除之后");
// singleList.show();
Data data5 = new Data(2,"BB");
singleList.edit(data5);
System.out.println("修改之后");
singleList.show();
}
}
对数据结构的理解还不够,如果代码中有错误的地方还请各位看官指正,谢谢!