一、单链表的创建
单链表的结点包括编号(按顺序)、结点信息以及指针。
class HeroNode{
public int no;
public String name;
public String nikename;
public HeroNode next;
public HeroNode(int no, String name, String nikename) {
this.no = no;
this.name = name;
this.nikename = nikename;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nikename='" + nikename + '\'' +
'}';
}
}
二、基本操作
1.按顺序添加结点
代码如下(示例):
// 按序号从小到大的顺序排序
public void addByOrder(HeroNode heroNode){
HeroNode temp = head;
boolean flag = false;//标记传入元素与链表中的元素是否重复
while (true) {
if(temp.next == null){
break;
}
if(temp.next.no > heroNode.no){//找到此位置就在temp后面
break;
}else if(temp.next == heroNode){
flag = true; // 说明链表中已经有该对象
break;
}
temp = temp.next; //后移,继续判断
}
// 判断flag的值
if(flag){
System.out.println("该数据重复");
}else{
// 将heroNode结点插到temp的后面
heroNode.next = temp.next;
temp.next = heroNode;
}
}
2.修改
代码如下(示例):
//修改结点 根据编号进行修改,即编号不能修改
public void update(HeroNode newheroNode){
HeroNode temp = head;
boolean flag = false;
if(temp.next == null){
System.out.println("链表为空");
return;
}
while(true){
if(temp.next == null){
break;
}
if(temp.no == newheroNode.no){
flag = true;
break;
}
temp = temp.next;
}
if(flag){
temp.name = newheroNode.name;
temp.nikename = newheroNode.nikename;
}else{
System.out.println("没有找到");
}
}
3.删除
代码如下(示例):
// 删除结点
public void del(int no){
HeroNode temp = head;
if(temp.next == null){
throw new RuntimeException("链表为空");
}
boolean flag = false;
while(true){
if(temp.next == null){
break;
}
if(temp.next.no == no){// 找到要删除的结点
flag = true;
break;
}
temp = temp.next;
}
if(flag){
temp.next = temp.next.next;
}else{
System.out.println("没有找到所要删除的编号");
}
}
4.打印
代码如下(示例):
// 展示链表
public void showList(){
HeroNode temp = head.next;
// 如果链表为空就直接返回
if(temp.next == null){
System.out.println("链表为空");
return;
}
while (true) {
if(temp.next == null){
System.out.println(temp);
break;
}else{
System.out.println(temp);
}
temp = temp.next;
}
}