2014-10-11 4 views
0

벡터 및 포인터를 사용하여 내 자신의 링크 된 목록을 구현하려고합니다. 문제는 첫 번째 노드에서 두 번째 노드를 가리킬 수 없다는 것입니다.링크 된 목록의 포인터/벡터

여기 내 코드이고 나는 시도했다 :

struct Node { 
    Node* previous; 
    Node* next; 

    int data; 
}; 

// Initialize: Create Vector size 20 and first node 
void LinkedList::init() { 
    vecList.resize(20, NULL); // Vector of size 20 
    Node* head = new Node(); // Create head node 
    head->previous = NULL; // Previous point set to null 
    head->next = vecList[1]; // Next pointer set to next position 
    head->data = 0;   // Data set at value 0 

    vecList[0] = head; // Put head node in first position 
    count = 1; // Increase count by 1 
} 

// Add Node to array 
void LinkedList::push_back(Node* node, int data) { 
    count += 1; 
    node = new Node(); 
    node->next = vecList[count + 1]; 
    node->previous = vecList[count - 1]; 
    node->data = data; 
    vecList[count - 1] = node; 
} 

데이터가 전달되었으며 의지하여 표시 :

cout << linkedlist.vecList[1]->data << endl; 

을하지만이 방법을 시도하는 경우 나 오류가 표시 다음 포인터를 말하는 것은 vecList처럼 보이는 <Unable to read memory>

cout << linkedlist.vecList[0]->next->data << endl; 
+0

당신은 어떻게'LinkedList의 :: push_back'를 호출 ... 당신이 실제로 목록의 장점을 패배 때문에 벡터 또는 배열과 연결리스트를 구현하려고하는 것이 조금 이상하다 ? – ilent2

+2

'LinkedList '란 무엇입니까? 'vecList' 란 무엇입니까? 코드를 어떻게 사용합니까? 어떤 오류가 발생합니까? –

+0

그리고 오류가 빌드 오류가 아닌 경우 디버거에서 한 줄씩 코드를 단계별로 실행하려 했습니까? –

답변

2

push_back 메서드에서 이전 Nodenext 포인터를 설정하는 것을 잊었습니다. count 엔트리의 수를 포함하는리스트의 멤버 변수가있는 경우에는이 같은 방법을 변경할 수있다 :

편집 : 실제로는 어레이 인덱스가 제로에서 시작하기 때문에 결국 count를 증가한다.

void LinkedList::push_back(Node * node, int data){ 
    node = new Node(); 
    node->next = NULL; // NULL because next element does not exist yet 
    node->previous = vecList[count - 1]; 
    node->data = data; 
    vecList[count] = node; 
    vecList[count-1]->next = vecList[count]; 
    count++; 
} 

아직도 그것은

+1

내 문제를 정렬 해 주셔서 감사합니다 :) 그리고 왜 벡터를 사용하여 목록을 저장했는지 나중에 내 강사에게 물어볼 수 있습니다. –

2

입니다 Node에 대한 포인터의 벡터/배열입니다.

void LinkedList::init(){ 
    ... 
    head->next = vecList[1]; 

그러나이 시점에서

, 두 번째 요소는 아직 존재하지 않습니다

당신이 초기화하기

, 당신은 두 번째 요소에 첫 번째 요소 지점 수 있습니다. 그래서 당신은 아직 그것을 가리킬 수 없습니다. 비슷한 것은 push_back 함수에서 잘못되었습니다.