修改链表(根据编号) 删除链表
public static void main(String[] args) {
//先创建节点
HeroNode heroNode1 = new HeroNode(1, "松江", "及时雨");
HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星");
HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头");
//加入 创建链表
SingleLinkedList singleLinkedList = new SingleLinkedList();
// singleLinkedList.add(heroNode1);
// singleLinkedList.add(heroNode4);
// singleLinkedList.add(heroNode2);
// singleLinkedList.add(heroNode3);
/**
* 插入有编号的英熊
*/
singleLinkedList.addbyorder(heroNode2);
singleLinkedList.addbyorder(heroNode3);
singleLinkedList.addbyorder(heroNode1);
singleLinkedList.addbyorder(heroNode4);
//显示
singleLinkedList.showLinkNode();
//修改
HeroNode heroNode22 = new HeroNode(2, "卢义", "麒麟");
singleLinkedList.update(heroNode22);
singleLinkedList.showLinkNode();
}
}
//定义SingleLinkList
class SingleLinkedList{
//先初始化一个头节点 不能动 不存放具体数据 只找到下一个节点位置
private HeroNode head = new HeroNode(0,"","");
//添加节点到单向链表 当不考虑编号顺序时,找到当前链表的最后节点,将最后的这个节点的next 指向新的节点
public void add(HeroNode heroNode){
//头节点不能动, 需要辅助变量(指针)
HeroNode temp = head;//头节点的属性自带next 本身也是节点
//遍历链表,找到最后
while (true) {//如果.next为空,即找到结尾
if (temp.next == null) {
break;//已经到最后了
}//如果没有找到,就将temp后移动相当于temp指针往后直到next==null
temp =temp.next;
}//当推出while循环时,temp就指向了来年表的最后
//将最后这个节点的next,指向新的节点
temp.next=heroNode;
}
//第二种添加的方式
public void addbyorder(HeroNode heroNode){
//因为头节点不能动 所以依然需要辅助指针帮助寻找添加的位置
HeroNode temp = head;
boolean flag= false;//添加的编号,是否存在,默认为false,已经存在的能添加
while (true) {
if (temp.next == null) {
break;
}//要用temp的下一个节点来比较,不能用本身来比较 当新的节点的.next域==temp.next域的时候
if(temp.next.no>heroNode.no){ //如果temp.next==4,4比要添加的2大,意思就是放到temp和temp.next中间
break;
} else if (temp.next.no == heroNode.no) {//说明添加的heronode的编号已然存在
flag= true;
break;
}
// else {
// System.out.println("添加出错了");
// }
temp=temp.next;//后移,遍历当前链表
}
if(flag){//不能添加 已存在
System.out.println("插入的编号已经存在");
}
else {
heroNode.next = temp.next ;//新的节点.next = temp.next
temp.next=heroNode; //temp.next = 新的节点
}
}
//根据new heronode的no编号来修改
public void update(HeroNode newheroNode){
if (head.next == null) {
System.out.println("链表为空 ");
return;
}//找到需要修改的节点,根据no编号,定义辅助
HeroNode temp = head.next;
boolean flag = false; // 表示是否找到该节点
while (true) {
if (temp == null) {//如果为空,到了链表的尾部
break;
}
if (temp.no == newheroNode.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.name = newheroNode.name;
temp.nickName =newheroNode.nickName;
}else {
System.out.println("没有找到这个节点的编号"+newheroNode.no);
}
}
public void showLinkNode(){//需要一个辅助变量,帮助遍历真个链表
if(head.next==null){
return;
}//因为头节点不能动,所以需要辅助变量
HeroNode temp = head.next;
while (true) {
//判断是否是链表的最后
if (temp == null) {
break;
}
System.out.println(temp);
temp=temp.next;
}
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
删除 一号节点链接7号节点 会被回收

public void delete(int no){ //head不能动,需要一个temp辅助节点找到待删除节点的前一个节点
HeroNode temp = head;
boolean flag = false; //是否找到待删除的节点
while (true) {
if (temp.next== null) {
System.out.println("链表最后");
break;
}
if (temp.next.no == no) { //找到待删除节点的前一个节点temp
flag = true;
break;
}
temp=temp.next.next;
}
if (flag) {
temp.next=temp.next.next;
}else
{
System.out.println("删除的不存在");
}
}


浙公网安备 33010602011771号