package alo;
import java.util.Stack;
public class 单链表_SingleLinkedList {
public static void main(String[] ags){
SingleLinkedList sin=new SingleLinkedList();
sin.add("白","李");
sin.add("轼","苏");
sin.add("甫","杜");
sin.insert(2,"信","李");
sin.add("歌","元");
sin.update("李信",3,"信","李");
sin.remove("李信");
sin.showLinked();
System.out.println(sin.getNum());
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!测试reversePrint!!!!!!!!!!!!!!!!!");
sin.showReverseLinked();
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!测试reverse!!!!!!!!!!!!!!!!!!!!!!");
sin.reverse();
sin.showLinked();
}
}
class Node{
public Node next;
public String firstName;
public String lastName;
public int no;
public Node(){}
public Node(int no,String lastName,String firstName){
this.no=no;
this.lastName=lastName;
this.firstName=firstName;
}
public String toString(){
return "lastName="+lastName+",firstName="+firstName;
}
}
class SingleLinkedList{
private final Node head=new Node(0, "人","诗");
private static int index=0;
public SingleLinkedList(){};
public void add(String lastName,String firstName){
Node indexNode=head;
while(true){
if(indexNode.next==null){
indexNode.next=new Node(++index,lastName,firstName);
break;
}else{
indexNode=indexNode.next;
}
}
}
public void insert(int no,String lastName,String firstName){
Node indexNode=head;
Node backNode;
Node newNode=new Node(no,lastName,firstName);
while(true){
if(indexNode.next==null){
this.add(lastName,firstName);
break;
}
else if(indexNode.next.no>no){
backNode=indexNode.next;
indexNode.next=newNode;
newNode.next=backNode;
System.out.println("已插入:"+firstName+lastName);
break;
}
indexNode=indexNode.next;
}
}
public void update(String name,int no,String lastName,String firstName){
Node indexNode=head;
while(true){
if(indexNode.next==null){
break;
}
if((indexNode.firstName+indexNode.lastName).equals(name)){
indexNode.firstName=firstName;
indexNode.lastName=lastName;
indexNode.no=no;
System.out.println("已更改:"+name);
break;
}
indexNode=indexNode.next;
}
}
public void pop(){
Node index =head;
while(true){
if(index.next.next==null){
index.next=null;
break;
}
index=index.next;
}
}
public void remove(String name){
Node indexNode=head;
while(true){
if(indexNode.next==null){
pop();
break;
}
if((indexNode.next.firstName+indexNode.next.lastName).equals(name)) {
indexNode.next = indexNode.next.next;
System.out.println("已删除:"+name);
break;
}
indexNode=indexNode.next;
}
}
public void showLinked(){
Node n=head;
while(true){
if(n==null){
System.out.println("结束!");
break;
}
System.out.printf("no=%s,name=%s%s ",n.no,n.firstName,n.lastName);
System.out.println(n);
n=n.next;
}
}
public int getNum(){
Node o=head;
int in=0;
while(true){
if(o.next==null){
++in;
break;
}
o=o.next;
in++;
}
return in;
}
public void reverse(){
if(this.getNum()==2 || this.getNum()==1){
return;
}
Node indexNode= new Node();
Node index=head.next;
Node nex;
while(index!=null){
nex=index.next;
index.next=indexNode.next;
indexNode.next=index;
index=nex;
}
this.head.next=indexNode.next;
}
public void showReverseLinked(){
if(head.next==null){
return;
}
Stack<Node> stack=new Stack<Node>();
Node index=head;
while(true){
if(index.next==null){
stack.add(index);
break;
}
stack.add(index);
index=index.next;
}
while(stack.size()>0){
Node inde= stack.pop();
System.out.println("no="+inde.no+",name="+inde.lastName+inde.firstName+" "+inde);
}
}
}