Я впервые сталкиваюсь с таким указателем. То указывает, то снова указывает, что это означает? Я столкнулся с этим в программе с двойным связным списком.
listPointer->leftPointer->rightPointer = newNodePtr;
It points then points again, what does this imply?
Код подразумевает, что существует своего рода
struct Node {
Node* leftPointer;
Node* rightPointer;
};
который используется рекурсивно для построения дерева.
listPointer
объявлен как
Node* listPointer;
newNodePtr
объявлен как
Node* newNodePtr;
Сложная часть будет заключаться в том, чтобы все эти указатели имели правильно выделенную память, чтобы указывать, когда
listPointer->leftPointer->rightPointer = newNodePtr;
выполняется во время выполнения.
Что касается двусвязного списка, поскольку вы отметили свой вопрос так:
Я бы предпочел другое название struct
и его участников.
struct DoubleLinkedListItem {
DoubleLinkedListItem* previous;
DoubleLinkedListItem* next;
};
для ясности.
Возможно, используется для удаления listPointer
из списка ссылок, как указано ниже:
listPointer->leftPointer->rightPointer = newNodePtr;
newNodePtr->rightPointer = listPointer
Вероятно, это часть вставки нового элемента. Если вы сделаете это правильно, вам нужно знать только элемент после, куда вы хотите его вставить, и элемент, который вы вставляете. Остальные элементы можно получить по ссылкам.
Начиная с
listPtr
|
v
---------- ----------
| |->| |
| Node L | | Node |
| |<-| |
---------- ----------
newNodePtr
|
v
----------
| |
| Node N |
| |
----------
Сначала сделайте
listPointer->leftPointer->rightPointer = newNodePtr;
Так что предыдущий элемент указывает на новый элемент
newNodePtr listPtr
| |
v v
---------- ---------- ----------
| |--->| | | |
| Node L | | Node N | | Node |
| |<-| | | |-| |
---------- | ---------- | ----------
| |
|-------------|
Тогда сделайте
newNodePtr->leftPointer = listPointer->leftPointer;
Чтобы новый элемент указывал на предыдущий элемент
newNodePtr listPtr
| |
v v
---------- ---------- ----------
| |--->| | | |
| Node L |<---| Node N | | Node |
| |<-| | | |-| |
---------- | ---------- | ----------
| |
|-------------|
Тогда сделайте
listPointer->leftPointer = newNodePtr;
Чтобы следующий элемент указывал на новый элемент
newNodePtr listPtr
| |
v v
---------- ---------- ----------
| |->| | | |
| Node L | | Node N | | Node |
| |<-| |<-| |
---------- ---------- ----------
Затем, наконец,
newNodePtr->rightPointer = listPointer;
Чтобы новый элемент указывал на следующий элемент
newNodePtr listPtr
| |
v v
---------- ---------- ----------
| |->| |->| |
| Node L | | Node N | | Node |
| |<-| |<-| |
---------- ---------- ----------
Невозможно В самом деле понять это, не зная типа
listPointer
и не найдя его документации или определения его класса (например, с ключевыми словамиclass
илиstruct
).