构建链表
class HeroNode
{
public int no;
public String name;
public String nickname;
public HeroNode next;
public HeroNode (int no,String name,String nickname) {
this.no=no;
this.name=name;
this.nickname=nickname;
}
//为了显示方法,重写ToString
@Override
public String toString()
{
return "HeroNode[no="+no+",name="+name+",nickname="+nickname+"]";
}
}
//定义单链表来管理英雄
class SingleLinkedList
{
//先初始化一个头节点
private HeroNode head=new HeroNode(0,"","");
//添加节点到单向链表
//不考虑顺序
//1.找到当前链表的的最后节点
//2.将最后节点的next指向新节点
public void add(HeroNode heroNode)
{
HeroNode temp=head;
//遍历链表 找到最后
while (temp.next!=null)
{
temp=temp.next;
}
temp.next=heroNode;
}
public void addByOrder(HeroNode heroNode)
{
//因为头节点不能动 仍然通过辅助指针
//因为单链表 因此我们找的temp是位于添加位置的前一个节点,否则加入不了
HeroNode temp=head;
boolean flag=false;//标识 添加的编号是否存在 默认false
while (temp.next!=null)
{
if(temp.next.no>heroNode.no)
break;
else if(temp.next.no==heroNode.no)
{
//希望添加的编号已经参加
flag=true;//编号存在
break;
}
temp=temp.next;
}
if(flag)
{
System.out.println("编号已经存在");
}
else
{
heroNode.next=temp.next;
temp.next= heroNode;
}
}
public void change(HeroNode newHeroNode)
{
if(head.next==null)
{
System.out.println("空链表");
return;
}
HeroNode temp=head;
boolean flag=false;
while (temp.next!=null)
{
if(temp.next.no==newHeroNode.no)
{
flag=true;
break;
}
}
}
//反转链表
public void recover()
{
if(head.next==null||head.next.next==null) return ;
HeroNode temp=head.next;
HeroNode next=null; //指向temp的下一个节点
HeroNode reverseHead=new HeroNode(0,"","");
while (temp!=null)
{
next=temp.next;//先暂时保存当前节点的下一个节点
//把节点摘下来
temp.next=reverseHead.next;//将temp的下一个节点指向新的链表的最前端
reverseHead.next=temp;//将temp 插入到新的链表中
temp=next;
}
head.next=reverseHead.next;
}
//链表的倒数第k个节点
public HeroNode newNode(int k)
{
if(head.next==null) return null;
int length=0;
HeroNode temp=head.next;
while (temp!=null)
{
length++;
temp=temp.next;
}
System.out.println(length);
if(length<0||length<k) return null;
HeroNode cur=head.next;
for(int i=0;i<length-k;i++)
cur=cur.next;
return cur;
}
//显示链表
public void list()
{
if(head.next==null)
{
System.out.println("空");
return;
}
//头节点不能动
HeroNode temp=head.next;
while (temp!=null)
{
System.out.println(temp);
temp=temp.next;
}
}
}