将节点插入链接列表

问题描述:

对于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

由于这是作业,我会带领你走向正确的方向。

insertAfter方法是错误的。

您创建一个新节点的第一行。 你用当前覆盖这个newnode的第二行。

从这些错误开始。

最好的方法是用您的链接绘制图片。想想你需要怎么做才能将新节点放入列表中。如果你张贴`LinkList`和`显示列表()`太,什么不顺心还可以依据这些代码