"listPointer->leftPointer->rightPointer = newNodePtr;" 是做什么的?

What does "listPointer->leftPointer->rightPointer = newNodePtr;" do?

第一次遇到这种类型的指针。它指着又指着,这意味着什么?我在双向链表程序上遇到过这个。

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;
};

为清楚起见。

可能用于从 link 列表中删除 listPointer,如下所述:

listPointer->leftPointer->rightPointer = newNodePtr;
newNodePtr->rightPointer = listPointer

这可能是插入新元素的一部分。如果你做对了,你只需要知道你想插入它的after元素,以及你要插入的元素。其他元素可以通过链接获取。

开始
             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  |
|        |<-|        |<-|        |
----------  ----------  ----------