взаимосвязанный список в 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.

If i tried to achieve this with the first mentioned linked list structure, it seems it would not be sufficient for a person object to only have one pointer to the next object, since B -> A -> C means that A's next-pointer is pointing at C, so that C -> A-> B is now not possible.

Есть ли способ сделать структуру данных похожей на связанный список, где вместо того, чтобы каждый объект указывал на следующий объект, каждый объект может удерживать несколько указателей на других узлах и по-прежнему являться элементом самого «списка»?

0
Для этого список не является правильной структурой данных. Вам нужен график .
добавлено автор jlordo, источник
Это кажется очень правильным. Большое спасибо! :)
добавлено автор user2005142, источник

2 ответы

То, что вы ищете, это структура графика. Вы можете попробовать иметь хэш с ключом как имя и ценность человека как связанный список всех его друзей.

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

Вы можете проверить реализацию списка смежности в java.

1
добавлено

Использовать дерево как это

public class Friends {
    private Friend self;

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

    public static class Friend {
        private Person info;
        private Friend parent;
        private List> children;
    }
}
0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async