"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 |
| |<-| |<-| |
---------- ---------- ----------
第一次遇到这种类型的指针。它指着又指着,这意味着什么?我在双向链表程序上遇到过这个。
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 |
| |<-| |<-| |
---------- ---------- ----------