2010-09-24 98 views
3

對於java來說,我相當新,所以如果這太可怕,請提前抱歉。基本上我想插入一個數字說,鏈接列表是[10 30 50 70]我想插入40,所以我輸入下一個然後再下一個,現在我在50.我想插入之前,但是當我鍵入它只是返回之前,然後40 10 30 50 70]總= 4和電流爲50將節點插入鏈接列表

public void insertAfter(long dd) { 
    Node newNode = new Node(dd); // insert a new node after current node; 
    newNode = current; 
    current = previous; 
    if (current != null) {  // if current is not null, don't change it; otherwise set current to new node. 
     return; 

    } 
    else { 
    newNode = current; 
    } 
} 

public void insertBefore(long dd) { 
    Node newNode = new Node(dd); // insert a new node before current node, always set current to the new node 
    current = previous; // to be implemented 
    newNode = current; 
} 

這裏是調用這兩種方法並提供所述列表的代碼。有什麼建議麼?

package hw4; 

import java.io.*;     // for I/O 

class TestLinkList { 

    public static void main(String[] args) throws IOException 
     { 
     LinkList theList = new LinkList();   // new list 

     theList.insertFirst(70); 
     theList.insertFirst(50); 
     theList.insertFirst(30); 
     theList.insertFirst(10); 
     theList.reset(); 

     while(true) { 
     System.out.print("Enter first letter of reset, "); 
     System.out.print("next, get, before, after, delete, exit: "); 
     System.out.flush(); 
     int choice = getChar();   // get user's option 
     long value; 
     switch(choice) 
      { 
      case 'r':     // reset (to first) 
       theList.reset(); 
       theList.displayList(); 
       break; 
      case 'e':     // exit the while loop 
       break; 
      case 'n':     // advance to next item 
       if(theList.getCurrent() != null) { 
        theList.nextLink(); 
        theList.displayList(); 
       } else 
        System.out.println("Can't go to next link"); 
       break; 
      case 'g':     // get current item 
       if(theList.getCurrent() != null) { 
        value = theList.getCurrent().dData; 
        System.out.println("Returned " + value); 
        } 
       else 
        System.out.println("List is empty"); 
       break; 
      case 'b':     // insert before current 
       System.out.print("Enter value to insert: "); 
       System.out.flush(); 
       value = getInt(); 
       theList.insertBefore(value); 
       theList.displayList(); 
       break; 
      case 'a':     // insert after current 
       System.out.print("Enter value to insert: "); 
       System.out.flush(); 
       value = getInt(); 
       theList.insertAfter(value); 
       theList.displayList(); 
       break; 
      case 'd':     // delete current item 
       if(theList.getCurrent() != null) { 
        value = theList.deleteCurrent(); 
        System.out.println("Deleted " + value); 
        theList.displayList(); 
       } else 
        System.out.println("Can't delete"); 
       break; 
      default: 
       System.out.println("Invalid entry"); 
      } // end switch 

      if (choice == 'e') break; 
     } // end while 

    } // end main() 

    public static String getString() throws IOException { 
     InputStreamReader isr = new InputStreamReader(System.in); 
     BufferedReader br = new BufferedReader(isr); 
     String s = br.readLine(); 
     return s; 
    } 

    public static char getChar() throws IOException { 
     String s = getString(); 
     return s.charAt(0); 
    } 

    public static int getInt() throws IOException { 
     String s = getString(); 
     return Integer.parseInt(s); 
    } 

} 
+0

將是一件好事。 – schnaader 2010-09-24 20:26:00

回答

2

由於這是作業,我會帶領你走向正確的方向。

insertAfter方法是錯誤的。

您創建一個新節點的第一行。 你用當前覆蓋這個newnode的第二行。

從這些錯誤開始。

最好的方法是用您的鏈接繪製圖片。想想你需要怎麼做才能將新節點放入列表中。如果你張貼`LinkList`和`顯示列表()`太,什麼不順心還可以依據這些代碼