2016-05-03 2 views
-1

Я новичок в C++ и изучаю связанный список. Однако я столкнулся с некоторыми неприятностями.Двойной указатель, когда в структуре связанного списка

Для нормального случая, когда мы определим связанный список, вот структура Node:

struct Node{ 

    int data; 

    Node* next; 

}; 

Однако, как мы можем определить связанный список, когда структура станет так:

struct Node{ 

    int data; 

    Node** next; // Double pointer instead 

}; 

Я довольно путаюсь с двойным указателем, что мы должны назначить «следующему»? Например, когда мы вставляем узел в начале, когда мы назначаем значение заголовка в newPtr->next:

newPtr->next = &head? Это правильно?

Спасибо всем.

+0

Почему бы вам не попробовать? Есть множество наборов образцов и учебных пособий, как сделать связанные списки. –

+0

Средство двойных указателей: следующее указывает на массив, содержащий указатели – Hearner

ответ

0

Я не уверен в этом, но я просто хочу поделиться своими мыслями, так как я также начинаю узнавать о указателях. Пожалуйста, поправьте меня, если я ошибаюсь.

#include <iostream> 
 

 
int main() 
 
{ 
 
\t int **p = new int*; // Pointer to a pointer. 
 
\t int *q = new int; // Pointer. 
 
\t 
 
\t // Assigning the value of 5 to where q points to. 
 
\t // The "*" is used as a dereference operator 
 
\t // meaning that it assigns 5 to where q is pointing to. 
 
\t *q=5; 
 
\t 
 
\t // Here you are pointing p to point to q. 
 
\t // That is why it is called a pointer to a pointer. 
 
\t // The "*" here is used as pointer to point to another pointer. 
 
\t *p=q; 
 

 
\t // Then here you can access the value of the p by dereferencing 
 
\t // it twice. 
 
\t 
 
\t std::cout << **p << std::endl; 
 
\t 
 
\t // Outputs 5. 
 
\t 
 
\t return 0; 
 
}

Как что говорят другие в комментариях вы создаете указатель на указатель. int * p означает, что он может напрямую указывать данные, а int ** q означает, что он может указывать на другой указатель, в данном случае * p. Количество * указывает, насколько глубоко вы идете. Предполагая, что вы хотите, чтобы ваш узел, чтобы иметь два указателя, то вы должны сделать что-то вроде этого:

struct Node 
 
{ 
 
    int data; 
 
    Node *next, *prev; 
 
}

Он также называется двусвязный список. Где вы можете двигаться вперед и назад.

Смежные вопросы