class listlink,删除时不必释放内存。

解决方案 »

  1.   

      import java.io.*;  public class List   {  /*用变量来实现表头*/  private Node Head=null;  private Node Tail=null;  private Node Pointer=null;  private int Length=0;  public void deleteAll()  /*清空整个链表*/  {  Head=null;  Tail=null;  Pointer=null;  Length=0;  }  public void reset()  /*链表复位,使第一个结点成为当前结点*/  {  Pointer=null;  }  public boolean isEmpty()  /*判断链表是否为空*/  {  return(Length==0);  }  public boolean isEnd()  /*判断当前结点是否为最后一个结点*/  {  if(Length==0)  throw new java.lang.NullPointerException();  else if(Length==1)  return true;  else  return(cursor()==Tail);  }  public Object nextNode()  /*返回当前结点的下一个结点的值,并使其成为当前结点*/  {  if(Length==1)  throw new java.util.NoSuchElementException();  else if(Length==0)  throw new java.lang.NullPointerException();  else  {  Node temp=cursor();  Pointer=temp;  if(temp!=Tail)  return(temp.next.data);  else  throw new java.util.NoSuchElementException();  }  }  public Object currentNode()  /*返回当前结点的值*/  {  Node temp=cursor();  return temp.data;  }    public void insert(Object d)  /*在当前结点前插入一个结点,并使其成为当前结点*/  {  Node e=new Node(d);  if(Length==0)  {  Tail=e;  Head=e;  }  else  {  Node temp=cursor();  e.next=temp;  if(Pointer==null)  Head=e;  else  Pointer.next=e;  }  Length++;  }  public int size()  /*返回链表的大小*/  {  return (Length);  }  public Object remove()  /*将当前结点移出链表,下一个结点成为当前结点,如果移出的结点是最后一个结点,则第一个结点成为当前结点*/  {  Object temp;  if(Length==0)  throw new java.util.NoSuchElementException();  else if(Length==1)  {  temp=Head.data;  deleteAll();  }  else  {  Node cur=cursor();  temp=cur.data;  if(cur==Head)  Head=cur.next;  else if(cur==Tail)  {  Pointer.next=null;  Tail=Pointer;  reset();  }  else  Pointer.next=cur.next;  Length--;  }  return temp;  }  private Node cursor()  /*返回当前结点的指针*/  {  if(Head==null)  throw new java.lang.NullPointerException();  else if(Pointer==null)  return Head;  else  return Pointer.next;  }    public static void main(String[] args)  /*链表的简单应用举例*/  {  List a=new List ();  for(int i=1;i<=10;i++)  a.insert(new Integer(i));  System.out.println(a.currentNode());  while(!a.isEnd())  System.out.println(a.nextNode());  a.reset();  while(!a.isEnd())  {  a.remove();  }  a.remove();  a.reset();  if(a.isEmpty())  System.out.println("There is no Node in List  \n");  System.in.println("You can press return to quit\n");  try  {  System.in.read();//确保用户看清程序运行结果  }  catch(IOException e)  {}  }  }  class Node  /*构成链表的结点定义*/  {  Object data;  Node next;  Node(Object d)  {  data=d;  next=null;  }  }