2015-04-01 38 views
0

所以,我想弄清楚如何做一個家庭作業以下內容:請寫一個程序,要求用戶輸入一個字母。將該字母插入鏈表的末尾並打印出鏈表。詢問另一封信並插入鏈表末尾並打印出列表。繼續,直到用戶聲明他們沒有更多字母輸入。然後,建立另一個鏈接列表,要求用戶輸入一個字母,然後按字母順序將其插入列表中。每次插入後,打印列表並繼續,直到用戶輸入字母。鏈接列表使用節點吸收字符

這是我到目前爲止,並在那裏我一直在堅持,現在一個星期左右...

進口TerminalIO *。

公共類LinkedLists {

public static void addLine(){ 
    System.out.println(""); 
} 

public static void main(String[] args) { 

    String answer = "y"; 
    String n = null; 
    char nodePointer = ' '; 
    KeyboardReader reader = new KeyboardReader(); 

    Node start = new Node(); 
    Node temp = new Node(); 

    do{ 
     System.out.print("Enter a letter: "); 
     nodePointer = reader.readChar(); 
     start.letter = nodePointer; 

     start.nodeptr = new Node(start.letter); 
     //start.nodeptr.letter = temp.letter; 
     start = start.nodeptr; 

     System.out.print("Linked list: "); 

     temp = start; 
     while(temp != null){ 
      System.out.print(start.letter); 
      temp = temp.nodeptr; 
     } 
     addLine(); 

     System.out.print("Would you like to enter another letter (y/n)? "); 
     n = reader.readLine(); 

     addLine(); 
    }while(answer.compareTo(n) == 0); 

} 

}

構造:

公共類節點{

char letter; 
Node nodeptr; 

Node(){ 
    letter = ' '; 
    nodeptr = null; 
} 

Node(char x){ 
    letter = x; 
    nodeptr = null; 
} 

Node(char x, Node y){ 
    letter = x; 
    nodeptr = y; 
} 

}

我得到這個輸出是:

輸入一個字母:M
鏈表:M
你想進入另一個字母(Y/N)? Ÿ

輸入一個字母:○
鏈表:○
你想進入另一個字母(Y/N)? ñ

這正好爲任何字母I輸入,因爲信我輸入的是,在自己的名單出來的同一封信...

它應該輸出(第一部分):

輸入字母:m
鏈接列表:m
要輸入另一個字母(y/n)嗎? Ÿ

輸入一個字母:○
鏈表:莫
你想進入另一個字母(Y/N)? Ÿ

輸入一個字母:N
鏈表:週一
你想進入另一個字母(Y/N)? Ÿ

輸入一個字母:電子
鏈表:MONE
你想進入另一個字母(Y/N)? Ÿ

輸入一個字母:Y
鏈表:錢
你想進入另一個字母(Y/N)?Ÿ

然後該計劃的第二部分,它應該按照字母順序輸出像這樣:

輸入一個字母:M
鏈表:M
你想進入另一個字母(Y/N)? Ÿ

輸入一個字母:○
鏈表:莫
你想進入另一個字母(Y/N)? Ÿ

輸入一個字母:N
鏈表:MNO
你想進入另一個字母(Y/N)? Ÿ

輸入一個字母:電子
鏈表:emno
你想進入另一個字母(Y/N)? Ÿ

輸入一個字母:Y
鏈表:emnoy
你想進入另一個字母(Y/N)? y

如果任何人都可以幫助我指出正確的方向或編寫代碼,那麼這兩者都將是有益的,因爲我現在誠實地失去了我應該如何操作節點來做我想讓他們做的事情。

+0

告訴我們更多關於你所得到的輸出。這會讓人們更容易幫助你。 – 2015-04-01 18:57:49

+0

修正了輸出。謝謝艾薩克告訴我這件事。 – moneydog11 2015-04-02 00:14:36

回答

0

我們缺少定義節點的部分代碼。然而,即使沒有,我可以看到你的開始指針通過這條線在你的循環讓你重置循環內爲每一個進入信:

start = start.nodeptr; 

這不是做事之有道。鏈接列表頭(也就是你的開始指針)只能在添加第一個字母時設置爲ONCE,然後在隨後的循環中不會改變。

而且,在此代碼段:

temp = start; 
while(temp != null){ 
    System.out.print(start.letter); 
    temp = temp.nodeptr; 
} 

你是在循環溫度,但總是打印出start.letter

如果我去適應你的代碼,你應該建立每個新字母到您臨時指針,只設置開始 = 臨時開始爲NULL。而且你還應該維護一個鏈表尾(又名最後指針),以便將下一個字母快速插入鏈表的末尾。

所以我會適應你的代碼如下,但因爲我沒有你的節點定義可能會在下面的一些錯誤。

public static void main(String[] args) { 

    String answer = "y"; 
    String n = null; 
    char nodePointer = ' '; 
    KeyboardReader reader = new KeyboardReader(); 

    Node start = NULL; 
    Node last = NULL; 
    Node temp = NULL; 

    do{ 
     System.out.print("Enter a letter: "); 
     nodePointer = reader.readChar(); 

     temp = new Node(nodePointer); 
     temp.nodeptr = NULL; 
     if (start == NULL) start = temp; 
     if (last != NULL) last.nodeptr = temp; 
     last = temp; 

     System.out.print("Linked list: "); 

     temp = start; 
     while(temp != null){ 
      System.out.print(temp.letter); 
      temp = temp.nodeptr; 
     } 
     addLine(); 

     System.out.print("Would you like to enter another letter (y/n)? "); 
     n = reader.readLine(); 

     addLine(); 
    }while(answer.compareTo(n) == 0); 

} 

我打算留給你來制定第二部分作業......當你必須按字母順序將新的字母插入鏈表的開始,中間或結尾(而不是第1部分,這是將字母添加到列表末尾的簡單情況)。一個提示,所有這些現有的StackOverflow答案。本週我已經在鏈表上回答了3或4個問題。

+0

感謝cybermike!老實說,我只是在Google上搜索這類東西的答案,但找不到與我需要做的事情直接相關的任何內容。 – moneydog11 2015-04-02 11:48:24

+0

作爲參考,檢查您問題右側的「相關」列(以及您最初通過谷歌搜索找到的其他人的問題)。有一些相關的答案被引用。 – cybermike 2015-04-02 11:52:06

+0

是的,這是我第一次發佈到Stack,所以我想我會發布我自己的問題。發現你回答的代碼存在一個小問題,因爲它在m之後停止輸出這些字母。例如,如果我輸入m,那麼它會輸出mo。然後當我輸入n時,它輸出mn而不是mon。任何快速解決這個問題?我將包含我正在使用的節點的構造函數。 – moneydog11 2015-04-02 15:46:56