public class SingleLinkList {
private HeroNode head=new HeroNode(-1,"");
public void addNode(HeroNode heroNode){
HeroNode temp=head;
while (true){
if(temp.getNext()==null){
break;
}
temp=temp.getNext();
}
temp.setNext(heroNode);
}
public void delNode(HeroNode heroNode){
HeroNode temp=head;
while (true){
if(temp.getNext()==null){
break;
}
if(temp.getNext()==heroNode){
HeroNode next = temp.getNext();
temp.setNext(next.getNext());
next.setNext(null);
break;
}
temp=temp.getNext();
}
}
public void modifyNode(HeroNode oldNode,HeroNode newNode){
HeroNode temp=head;
while (true){
if(temp.getNext()==null){
break;
}
if(temp.getNext()==oldNode){
newNode.setNext(oldNode.getNext());
oldNode.setNext(null);
temp.setNext(newNode);
break;
}
temp=temp.getNext();
}
}
public void printList(){
HeroNode temp=head.getNext();
while (true){
if(temp==null){
break;
}
System.out.println(temp);
temp=temp.getNext();
}
}
public int getNodeNum(){
int size=0;
HeroNode temp=head;
while (temp.getNext()!=null){
size++;
temp=temp.getNext();
}
return size;
}
public HeroNode getLast(int num){
int size = this.getNodeNum();
if(size==0){
return null;
}
if(num<0){
return null;
}
int index=size-num+1;
if(index<0){
return null;
}
int k=1;
HeroNode temp=head.getNext();
while (true){
if(temp==null){
break;
}
if(index==k){
return temp;
}
k++;
temp=temp.getNext();
}
return null;
}
//链表的反转
public void reverse(){
HeroNode cur=null;
HeroNode temp=head.getNext();
HeroNode reverseHead=new HeroNode(-2,"");
while (true){
if(temp==null){
break;
}
cur=temp.getNext();
temp.setNext(null);
if(reverseHead.getNext()==null) {
reverseHead.setNext(temp);
}else {
HeroNode next = reverseHead.getNext();
temp.setNext(next);
reverseHead.setNext(temp);
}
temp= cur;
}
head.setNext(reverseHead.getNext());
}
public void reversePrint(){ //逆向打印
HeroNode temp=head.getNext();
Stack<HeroNode> stack = new Stack<>();
while (true){
if(temp==null){
break;
}
stack.push(temp);
temp=temp.getNext();
}
while (true){
if(stack.empty()){
break;
}
System.out.println(stack.pop());
}
}
//--------------------- 更新编号来更新---------------------
public void addNodeByNo(HeroNode heroNode){
HeroNode temp=head;
boolean update=false;
while (true) {
if(temp.getNext()==null){
break;
}
if(temp.getNext().getNo()>heroNode.getNo()){
break;
}
if(temp.getNext().getNo()==heroNode.getNo()){
//更新
update=true;
break;
}
temp=temp.getNext();
}
if(update){
HeroNode next = temp.getNext();
temp.setNext(heroNode);
heroNode.setNext(next.getNext());
next.setNext(null);
return;
}
if(temp.getNext()==null){
temp.setNext(heroNode);
return;
}
HeroNode next = temp.getNext();
temp.setNext(heroNode);
heroNode.setNext(next);
}
public void delNodeByNo(int no){
HeroNode temp=head;
boolean del=false;
while (true){
if(temp.getNext()==null){
break;
}
if(temp.getNext().getNo()==no){
del=true;
break;
}
temp=temp.getNext();
}
if(del){
HeroNode next = temp.getNext();
temp.setNext(next.getNext());
next.setNext(null);
}
}
public void updateByNo(HeroNode newHero){
HeroNode temp=head;
boolean update=false;
while (true){
if(temp.getNext()==null){
break;
}
if(temp.getNext().getNo()==newHero.getNo()){
update=true;
break;
}
temp=temp.getNext();
}
if(update){
HeroNode next = temp.getNext();
temp.setNext(newHero);
newHero.setNext(next.getNext());
next.setNext(null);
}
}
public static void main(String[] args) {
HeroNode hao = new HeroNode(4, "hao");
HeroNode ming = new HeroNode(2, "ming");
HeroNode xiao = new HeroNode(1, "xiao");
/* HeroNode xiao = new HeroNode(1, "xiao");
HeroNode hao = new HeroNode(4, "hao");
HeroNode ming = new HeroNode(2, "ming");
SingleLinkList linkList = new SingleLinkList();
linkList.addNode(xiao);
linkList.addNode(hao);
linkList.addNode(ming);
// linkList.addNode();
//linkList.addNode(new HeroNode("3","ni"));
//linkList.addNode(hao);
linkList.printList();
System.out.println("............................");
*//* linkList.delNode(hao);
linkList.delNode(xiao);
linkList.printList();*//*
linkList.modifyNode(ming,new HeroNode(99,"ddd"));*/
SingleLinkList linkList = new SingleLinkList();
linkList.addNode(hao);
linkList.addNode(ming);
linkList.addNode(xiao);
linkList.printList();
System.out.println("反转后。。。。。。。。。。");
//linkList.reverse();
linkList.reversePrint();
}
}
public class HeroNode {
private int no;
private String name;
private HeroNode next;
public HeroNode(int no, String name) {
this.no = no;
this.name = name;
}
public HeroNode getNext() {
return next;
}
public void setNext(HeroNode next) {
this.next = next;
}
@Override
public String toString() {
return "HeroNode{" +
"no='" + no + '\'' +
", name='" + name + '\'' +
'}';
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}