2016-12-05 134 views
0

上我有一個linkNode(名爲List)具有下列值重複最後一個元素鏈表

XYZ 1 2 3

而且我希望它看起來像這樣:

XYZ 1 2 3 3

我寫道:

ListNode front=list; 
ListNode back = list; 
while (front != null) 
{ 
    back = front; 
    front = list.getNext(); 
} 

ListNode x = new ListNode (front.getValue(),back.getNext()); 
back.getNext().setNext(x); 

爲什麼這不起作用?我真的不得到一個錯誤,當我運行的代碼,它打印出來,我有以前的方法,這一次僅僅是空白

方法打印:

public static void print(ListNode list) 
{ 
    String p=""; 
    while(list!=null) 
    { 
     p+=list.getValue()+" "; 
     list=list.getNext(); 
    } 

    System.out.println(p); 
}  

方法,增加了節點:

ListNode z = new ListNode("x", 
       new ListNode("y", 
        new ListNode("z", 
         new ListNode("1", 
          new ListNode("2", 
           new ListNode("3",,null))))); 
+1

請提供全碼。打印鏈表的方法和添加元素的代碼。 –

+1

我只是做了@TAsk – ZeldaX

+0

所以你只想在打印時重複最後一個元素。因爲目前它正在打印所有節點值。您可以簡單地檢查下一個節點是否爲null,以複製打印中的最後一個元素。 –

回答

1

好的,這裏有很多問題;在你的循環你做:

front = list.getNext(); 

這不會去任何地方,只是重複獲得列表的頭。嘗試:

front = front.getNext(); 

接下來你要做:

ListNode x = new ListNode (front.getValue(),back.getNext()); 
back.getNext().setNext(x); 

如果修復在這一點上是null上面的循環,front,所以這成爲:

ListNode x = new ListNode (null.getValue(), null); 
null.setNext(x); 

這是要崩潰很糟糕,所以我認爲你想要:

ListNode x = new ListNode(back.getValue(),back.getNext()); 
back.setNext(x); 

但是,沒有看到setNext()等的代碼,我不太確定這是否正確。

0

這是完整的解決方案。

節點的結構是:

class ListNode{ 
    char ch; 
    ListNode next; 

    ListNode(char ch,ListNode next){ 
     this.ch=ch; 
     this.next=next; 
    } 
} 

然後,在最後添加的最後一個字符的方法是:

private ListNode repeatLastChar(ListNode list) { 
    ListNode front=list; 
    ListNode back = list; 
    while (front != null) 
    { 
     back = front; 
     front = front.next; 
    } 
    ListNode x = new ListNode (back.ch,null); 
    back.next=x; 
    return list; 
} 
相關問題