2012-04-28 57 views
0

鏈表類 -代碼扭轉備用節點在一個鏈表中的java

class MyList{ 
     int val; 
     MyList next; 
     MyList(int val){ 
      this.val = val; 
     } 

     @Override 
     public String toString() { 
      MyList current = this; 
      String out=""; 
      while(current != null){ 
       out += current.val+"-->"; 
       current = current.next; 
      } 


      return out+"TAIL"; 
     } 
    } 

我試圖及其working-

MyList list3 = list; 
    MyList list4 = list.next; 
    while(list3!=null && list4!=null){ 
     alternateListswap(list3,list4); 
     if(list3.next.next==null || list4.next.next==null) 
      break; 
     list3 = (list3.next.next==null)?null:list3.next.next; 
     list4 = (list4.next.next==null)?null:list4.next.next; 
    } 


private static MyList alternateListswap(MyList L3, MyList L4) { 
     int temp = L4.val; 
     L4.val = L3.val; 
     L3.val = temp; 
     return L3; 

    } 

我的輸入 -

MyList list = new MyList(1); 
     list.next = new MyList(2); 
     list.next.next = new MyList(3); 
     list.next.next.next = new MyList(4); 
     list.next.next.next.next = new MyList(5); 
     list.next.next.next.next.next = new MyList(6); 
     list.next.next.next.next.next.next = new MyList(7); 
     list.next.next.next.next.next.next.next = new MyList(8); 
     list.next.next.next.next.next.next.next.next = new MyList(9); 
     list.next.next.next.next.next.next.next.next.next = new MyList(10); 

我的目錄輸出是1→2→3→4→5→6→7→8→9→10→TAIL

現在我想在JAVA中交換LinkedList中的備用節點。

EXPETED OUTPUT - 2 - > 1 - > 4 - > 3 - > 6 - > 5 - > 8 - > 9 - > 10 - > 10 - > TAIL

+0

這功課嗎? – Aidanc 2012-04-28 12:09:13

+1

您能舉一個預期產出的例子嗎? – Tudor 2012-04-28 12:11:17

+0

我想出我需要做什麼,但如何實現是麻煩... – 2012-04-28 12:11:20

回答

1

您需要交換兩個元素(如果列表中至少有兩個),然後繼續下一對。你的方法目前是這樣做的:1)進入列表的最後(通過前遞歸),然後2)當你走向列表的前面時交換元素(當你走上遞歸調用鏈時)。這樣做的結果是扭轉列表

你需要這樣的:1)如果列表中至少有兩個元素(L,L.next有效)交換這兩個元素,然後2)進一步處理兩個元素並重復(例如alternateListswap(L.next.next);

+0

我試着按你的建議,現在的麻煩是我沒有得到實際的方式來增加List.next每次,意味着過程2是受到影響,在問題中更新了我的解決方案 – 2012-04-28 12:44:40

+0

您沒有實現我所建議的內容。現在,您將第一個元素與列表中的每個其他元素進行交換。 – Attila 2012-04-28 12:49:16

+0

明白了你的觀點,我只增加一個計數器,而不是第二個計數器,需要在第二個計數器上工作,但由於我是doint list = list.next,所以我丟失了以前的節點 – 2012-04-28 12:53:50