package LinkedList;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import com.sun.xml.internal.ws.api.ha.StickyFeature;
import jdk.internal.org.objectweb.asm.util.CheckAnnotationAdapter;
import javax.lang.model.element.NestingKind;
public class SingleLinkedListDemo {
public static void main (String[] args){
//创建节点
HeroNode hero1 = new HeroNode(1,"宋江","及时雨");
HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
SingleLinkedList singleLinkedList=new SingleLinkedList();
singleLinkedList.addByOrder(hero1);
singleLinkedList.addByOrder(hero4);
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero3);
singleLinkedList.addByOrder(hero3);
singleLinkedList.list();
HeroNode newheroNode=new HeroNode(2,"xiaolu","xiaoyu");
singleLinkedList.upDate(newheroNode);
System.out.printf("修改后:\n");
singleLinkedList.list();
}
}
class SingleLinkedList{
//初始化头结点,不要动
private HeroNode head=new HeroNode(0,"","");
//添加节点到单链表
//找到最后节点把这个节点的next指向新节点
public void add(HeroNode heroNode){
//因为head节点不能动
HeroNode temp=head;
//遍历链表找到最后节点
while(true){
if (temp.next==null)
{break;}
temp=temp.next;
}
temp.next=heroNode;
}
//修改节点内容
public void upDate(HeroNode newheroNODE)
{
if (head.next==null){
System.out.printf("链表为空");
return;
}
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.printf("没有找到编号为%d的节点",newheroNODE.no);
}
}
public void list(){
if(head==null)
{
System.out.println("链表为空");
return;
}
HeroNode temp = head.next;
while (true){
//判断是否到最后
if (temp==null){
break;
}
System.out.println(temp);
//next后移
temp=temp.next;
}
}
public void addByOrder(HeroNode heroNode){
//通过temp找到添加的位置
//temp位于添加节点前边
HeroNode temp= head;
boolean flag=false;
while (true){
if (temp.next==null)
{
break;
}
if (temp.next.no>heroNode.no)
{
//在temp后添加
break;
}
if (temp.next.no==heroNode.no){
//编号存在、
flag=true;
break;
}
temp=temp.next;
}
if (flag){
System.out.printf("准备添加的编号%d已经存在",heroNode.no);
}
else{
heroNode.next=temp.next;
temp.next=heroNode;
}
}
}
//定义节点
class HeroNode{
public int no;
public String name;
public String nickname;
public HeroNode next;
public HeroNode(int hNo, String hName,String hNickName) {
this.no=hNo;
this.name=hName;
this.nickname=hNickName;
}
//为了显示方便,重写ToString方法
@Override
public String toString() {
return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";
}
}