2013-02-07 125 views
0

在「扁平」鏈接列表結構中,每個對象通過單個指針鏈接到下一個對象。java中的鏈接列表

我在尋找的是一種有一組節點的方式,讓它們以鏈表的方式相互連接。

class Person{ 
    public Person next; 
    private String name; 

    //Contructor method et. cetera. 
} 

class List{ 
    private Person personlist, lastperson; 
    private int counter; 

    List(){ 
    Person lh = new Person("LISTHEADER"); 
    personListe = lh; 
    sistePerson = lh; 
    } 
    //insert getters and setters ++. 
} 

在其他情況下,包括一個指向前一個對象的指針也是很自然的。但是如果列表中的所有節點都需要互連,該怎麼辦?

可以說我有三個人物; A,B,C,我想列出一個擁有每個人朋友的列表。比方說, A是B和C的朋友 B是朋友A和C. C是朋友A和A.

,如果我試圖與第一次提到的鏈表結構來實現這一目標,現在看來,這由於B→A→C意味着A的下一個指針指向C,所以C→A→B現在是不可能的,因此對於一個人對象來說只有一個指向下一個對象的指針是不夠的。

有沒有辦法讓一個數據結構類似於鏈表,而不是讓每個對象都指向下一個對象,每個對象都可以持有多個指向其他節點的指針,而仍然是一個「列表中的元素「本身?

+3

列表不是正確的數據結構。你需要[圖](http://en.wikipedia.org/wiki/Graph_(data_structure))。 – jlordo

+0

這似乎很正確。非常感謝! :) – user2005142

回答

0

使用樹這樣

public class Friends<Person> { 
    private Friend<Person> self; 

    public Friends(Person friendData) { 
     self= new Friend<Person>(); 
     root.data = friendData; 
     root.children = new ArrayList<Friend<Person>>(); 
    } 

    public static class Friend<Person> { 
     private Person info; 
     private Friend<Person> parent; 
     private List<Friend<Person>> children; 
    } 
} 
1

你所尋找的是一個圖形結構。您可以嘗試將密鑰作爲人名和值作爲所有朋友的鏈接列表。

Example: 
hash(A) contains B->C 
hash(B) contains C->A 
hash(C) contains A->B 

您可以檢查java中的鄰接列表實現。