2015-04-26 43 views
-1

這是我對雙向鏈表的插入方法。它的工作原理,但傳遞方法的兩個參數看起來很麻煩。任何人都可以建議比這更清潔的方法?用於插入雙向鏈表(Java)的更好的方法結構

代碼 //執行示例 MyLinkedList list = new MyLinkedList(); 鏈接link1 =新鏈接(「A」); list.insert(list.head,link1); 鏈接link2 =新鏈接(「B」); list.insert(link1,link2); 鏈接link3 =新鏈接(「C」); list.insert(link2,link3); list.display_List_Start_From_Head();

public void insert(Link currentNode, Link newNode) 
    { 
     if(head == null) 
     { 
      head = newNode; 
      tail = newNode; 
     } 
     else 
     { 
      currentNode.next = newNode; 
      newNode.prev = currentNode; 
      tail = newNode; 
     } 


    } 


public class MyLinkedList { 

    public Link head; 
    public Link tail; 
    public Link currentNode; 
    public Link newNode; 

    public MyLinkedList() 
    { 
     head = null; 
     tail = null; 
    } 


public class Link { 

    public String data; 
    public Link prev; 
    public Link next; 

    public Link(String data) 
    { 
     this(data,null,null); 
    } 

    public Link(String data, Link prev, Link next) 
    { 
     this.data = data; 
     this.prev = prev; 
     this.next = next; 
    } 


} 
+0

你想更簡單,只是遍歷結構,以找到結束,或者你可以在一個結構列表跟蹤最後一個節點?你可能會發現這就是爲什麼二叉樹是有用的,因爲你可以插入到正確的位置,所以它被排序。 –

+0

可能codereview(http://codereview.stackexchange.com/)是問這個問題的最佳地點。 – JFPicard

+0

@JamesBlack你是否建議將LinkedList作爲參數傳遞? – Nicholas

回答

2
public void insert(Link newNode) 
{ 
    if(head == null) 
    { 
     head = newNode; 
     tail = newNode; 
    } 
    else 
    { 
     tail.next = newNode; 
     newNode.prev = tail; 
     tail = newNode; 
    } 

} 

BTW,重命名你的類,因爲LinkedList是太相似java.util.LinkedList

+0

我剛剛改名爲我的班級。偉大的建議和實施! – Nicholas

1

如果要追加到LinkedList結束,那麼你可以設置list.head.prev.next = newLinknewLink.next = list.headnewLink.prev = list.head.prevlist.head.prev = newLink

+0

我注意到你在插入過程中沒有更新尾部。你爲什麼這樣寫呢? – Nicholas

+0

我不確定OP的'LinkedList'類的具體實現 - 我所知道的確實是他有一個指向head元素的指針。 –