2013-11-01 66 views
0

我正在學習java中的LinkedLists和堆棧,並遇到了一個問題。此刻我有一個推送功能,它將一個對象放在堆棧頂部。我試圖找出如何做相反的事情,並將對象推到底部,而不會丟失列表中的鏈接。鏈接列表堆棧,推到底部不頂

爲了幫助你更好地理解我的問題,下面是一些部分。

對象構造:

//Variables 
public int planeID;   //unique plane identifier 
public String destination; //destination 
public String airline;  //airline name 
public String aircraft;  //aircraft type 
public double time;   //arrival or departure time 
public Plane next;   //next plane in terminal 

// Plane Constructor 
public Plane (int i, String dest, String airl, String airc, double t) { 

     planeID = i; 
     destination = dest; 
     airline = airl; 
     aircraft = airc; 
     time = t; 

}// END Plane Constructor 

插入最後一個項目(不工作的代碼)EDITED

公共無效insertLast(INT I,字符串DEST,字符串airl,字符串AIRC,雙T) {/ /建立新鏈接 Plane newPlane = new Plane(i,dest,airl,airc,t); 平面溫度=第一個;

while (temp.next != null) { 
    temp = temp.next; 
} 

temp.next = newPlane; 
} 

最後的推動下,在列表指的是我的LinkedList:

public void push(int i, String dest, String airl, String airc, double t) // put item on top of stack 
{ 
    theList.insertLast(i, dest, airl, airc, t); 
} 

所以,現在我試圖創建一個新的功能,可以說insertLast這將置件最好是到列表的底部而不是頂部,所以我可以修改我的推送使用隊列。

編輯: 原來,最好是使用這個隊列。

+1

請不要刪除您的問題的內容。我們正在恢復編輯過程,因此答案仍然有意義。 – Hooked

回答

2

你在這裏有什麼是singly linked list。如果要將項目插入此列表的末尾,則必須完全按照列表​​中的最後一項操作,並將新平面分配給其next參考。列表中的最後一項是next參考的項目是null
或者,作爲另一個變體,您可以保留兩個鏈接 - 一個用於列表中的第一個項目,另一個用於最後一個項目。這樣,當你需要在列表的末尾添加一些東西時,你不需要一路走下去。這將是double-ended list(不要把它與雙鏈表,這是另一個數據結構)。

+0

我認爲,他需要檢查Node是否有引用(如果不是null),如果沒有:有一個最後一個節點,所以您需要將最後一個節點引用到新節點。 – Ernusc

+0

@Ernusc是的,這是你如何找到最後一個元素 - 它的下一個引用是null。 – aga

+0

@aga我修改了我的問題,並在閱讀了您提供的源代碼後提供了包含的代碼,但它仍然無法正常工作,而且我真的不明白爲什麼。 – Ilja

0

當你在學習Java時,我不會只給你代碼,所以我寫了一些僞代碼。

function insertLast(item) { 
    tmp = first 
    while (tmp.next != null) { 
     tmp = tmp.next 
    } 
    // now we're at the bottom 
    tmp.next = item 
    item.next = null 
} 

你所要做的是第一要素,不斷收到.next直到它爲空,則在列表的末尾引用添加到您的新對象。

+0

是的,正確的。 :) – Ernusc

+0

正確,但一個可怕的設計,如果你需要經常這樣做。 –

+0

效率不是問題的一部分。沒有辦法繞過單個鏈接列表的最壞情況O(N)插入。 – azz