2013-02-07 103 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中的邻接列表实现。