import java.io.*;
import java.lang.*;
class Node{
    Object data;
    Node next;
public Node(Object d){
    data=d;
    next=null;
    }
}
public class Lisk1
{
    private Node Head=null;
    private Node Tail=null;
    private Node Pointer;
    private int Length=0;
  void insert(Lisk1 a,Node e)
   {  
    a.Length++;
    if(a.Length==1)
       {
      a.Head=e;
      a.Tail=a.Head;
      a.Pointer=a.Head.next;
    }
    else
    {
      a.Tail.next=e;
      a.Tail=e;
      a.Pointer=e.next;
    }
   }
  void output(Lisk1 a)
  {
    try{
      a.Pointer=a.Head;
      for(int i=1;i<=a.Length;i++)
          {
          System.out.print(Pointer.data+" ");
          a.Pointer=a.Pointer.next;
          if(a.Pointer==null)
            throw new  java.lang.NullPointerException(); 
          }  
       }catch(java.lang.NullPointerException  e ) {
        System.out.print("有错!");
       }
        
    }
void delete(Lisk1 a,int j){
     int i=1;
     a.Pointer=a.Head;
     if(j==1){
        System.out.println("The chracter is"+" "+a.Pointer.data);
        a.Head=a.Pointer.next;
        }
     else 
        {
             while(i!=j-1)
             {
              a.Pointer=a.Pointer.next;
              i++;
             }
              System.out.println("The chracter is"+" "+a.Pointer.next.data);
               if(j==10)
              a.Tail=a.Pointer;
              a.Pointer=a.Pointer.next.next;
             
         }
     }
public static void main(String [] args)
{
     int i=0;
     int j=2;
     Lisk1 a=new Lisk1();
     for(i=0;i<10;i++){
         Node e=new Node(new Integer(i));
         a.insert(a,e);
         }
     System.out.println("Please output the characters of link:");
         a.output(a);
     System.out.println("Please delete the index");
         a.delete(a,j);
}
}

解决方案 »

  1.   

    System.out.println("Please output the characters of link:")); //这里多了个)号
            a.output(a);
            System.out.println("Please delete the index"));//这里多了个)号
      

  2.   

    是output()方法中输出Node值的循环判断中有误。原有程序中在输出一个节点之后将Pointer指向下一个节点后在判断Pointer是否为空,若为空则抛出异常,这样的思路是对的,但依照程序的循环方式该实现方式会造成,在输出最后一个节点后,循环仍没有结束,仍会将Pointer指向下一个节点并进行判断,那么不论什么情况下程序都会抛异常了。可以把output()方法修改为如下的样子就Ok了:void output(Lisk1 a)
      {
          a.Pointer=Head;
          for(int i=1;i<=a.Length;i++)
              {
           try
           {
              if(a.Pointer==null) //只需调整判断Pointer是否为空的时机即可
                  throw new  java.lang.NullPointerException();  
             }catch(java.lang.NullPointerException  e ) {
             
               System.out.print("有错!");
             }
              System.out.print(a.Pointer.data+" ");
              a.Pointer=a.Pointer.next;
      }
            
    }