2016-09-16 11 views
0

이 int -> 6-> 8-> 10으로 이중 연결된 목록이 있고 int 1-> 7-> 3으로 다른 이중 연결된 목록을 만듭니다.다른 연결된 목록 내부에 링크 된 목록 삽입

내가하고 싶은 일은 첫 번째 목록의 int 5를 두 번째 목록의 int 1과 연결하는 것입니다. 다른 한 목록의 첫 번째 노드를 다른 목록의 첫 번째 노드를 가리 키도록합니다.

여기에 모든 의 거친 그림 enter image description here

나는 가능하면 그렇게하는 방법을 다른 목록 내부 데이터하지만 확신으로리스트를 저장에 대해 생각했다입니다.

+0

안녕하세요 이것은 이중 링크 된 목록이 아니며 이중 연결된 목록입니까? –

+0

실제로 나무처럼 보입니다. –

+0

귀하의 질문을 명확히 해주십시오. 귀하의 다이어그램이 귀하의 설명과 일치하지 않습니다. 1-> 7-> 3 목록은 어디에 있습니까? –

답변

1

그럼 난 정말 당신의 표현을 이해하지만, 사진을 기반으로하지 않습니다이 실제로 소위

struct Data { 
    int value; 
    std::list<int> list; 
}; 

std::list<Data> data = { 
    {5, {1}}, 
    {6, {7, 8, 5}}, 
    {8, {4, 3}}, 
    {10, {8, 4}} 
}; 
+2

코드 다이어그램의 화려한 복제! –

+0

니스, 비록 작업이 손으로 STL을 다시 수행하는 것이 겠지요. – iksemyonov

0

당신이 무엇을 원하는 이진 트리 또는 노드 시스템은 함께 구조를 만드는 것입니다 데이터 홀더 (귀하의 int 값) 다음 세 포인터가 하나의 아버지에 대한 두 가지 그것은 정말 링크 된 목록 아니지만 그것은 데이터 구조에 사용됩니다. 그래서 당신의 예제에서 5는 루트이고 그것은 널 포인터와 1 값에 하나의 포인터 그리고 6 값에 또 하나의 포인터를 가지고 있고 6과 1 모두 아버지 포인터를 가지고있다. 그리고 나서 1은 2 개의 널 포인터 아이들은 6을 가리키고 7은 7, 다른 하나는 8을 ​​가리킨다.

+0

자신의 데이터를 이진 트리로 저장할 수는 있지만, 일반적으로 동일한 데이터가 다양한 데이터 구조에 저장 될 수 있습니다. 인텔리전트 데이터 구조를 선택하려면 데이터와 사용법에 대해 더 많이 알아야합니다. – David

0

가능하면 목록을 다른 목록 안에 데이터로 저장하는 방법을 알았지 만 그 방법을 확신하지 못했습니다.

템플릿으로 가능합니다. 만약 1,7,3리스트가 5,1,7,3이되도록 허용한다면

OP는 이미 쓰여져 있기 때문에 데이터 구조를 고수하고 연결된리스트 로직을 무시할 것입니다.

template<class TYPE> 
class LinkedList 
{ 
private: 
    struct Node 
    { 
     TYPE data; 
     Node * next; 
     Node * prev; 
    }; 

    Node * head; 
public: 
    LinkedList():head(nullptr) 
    { 

    } 
    ~LinkedList() 
    { 
     while (head != nullptr) 
     { 
      Node *temp = head; 
      head = head->next; 
      delete temp; 
     } 
    } 
    // methods go here 
}; 

이것은 최소한입니다. 목록을 처리하려면 삽입, 제거 및 반복기 또는 다른 탐색 방법이 필요합니다. To be Rule of Three compliant이면 복사 생성자와 대입 연산자 (operator=)도 필요합니다. Node을 사용자에게 노출시키지 않는 것이 좋습니다. 그것으로 그들은 모든 종류의 지옥을 깰 수 있습니다. 그래서 이터레이터 뒤에 Node을 숨 깁니다. 5,1,7,3 변형 목록의

선언은 Node

LinkedList<LinkedList<int>> list; 

list 점과 같을 것입니다. 이 Node은 을 가리키며 Nodeints이고 다음 노드와 이전 노드를 가리 킵니다. 5,6,8,10을 유지하기

및 1,7,3, 당신은 수와

struct Intermediary 
{ 
    int data; 
    LinkedList<int> sublist; 
}; 

LinkedList<Intermediary> list; 

std::pair

도 일하는 것이 연결리스트를 저장하는 중개가 필요합니다.