C++链表插入节点,前一个节点初始化
Posted
技术标签:
【中文标题】C++链表插入节点,前一个节点初始化【英文标题】:C++ Linked Lists Inserting a Node, Previous Node intialization 【发布时间】:2021-05-25 19:30:46 【问题描述】:我正在查看我的 C++ 教科书,查看链接列表函数的示例,该函数用于在下面的列表中插入新节点....
Void NumberList::insertNode(double num)
ListNode *newNode; //A new node
ListNode *nodePtr; //To transverse the list
ListNode *previousNode = nullptr; //The previous node
//Allocate a new node and store num there
newNode = new ListNode;
newNode->value = num;
//If there's no nodes in the list, make newNode the first node
if (!head)
head = newNode;
newNode->next = nullptr;
else //Otherwise, insert newNode
//Postion nodePtr at the head of the list
nodePtr = head;
//Initialize previousNode to nullptr.
previousNode = nullptr;
//Skip all nodes whose value is less than num.
while (nodePtr != nullptr && nodePtr->value < num)
previousNode = nodePtr;
nodePtr = nodePtr->next;
//If the new node is the 1st in the list, insert it before all other nodes
if (previousNode == nullptr)
head = newNode;
newNode->next = nodePtr;
else //Otherwise insert after the previous node
previousNode->next = newNode;
newNode->next = nodePtr;
`
我想知道为什么 previousNode 在代码中被初始化为 nullptr 两次?一次还不够好吗?
另一件事,谁能给我一个例子,如果要存储的数据是字符或字符串,我们将如何将节点插入到列表中?由于在本例的 while 循环中,它声明节点中的数据必须小于传递给函数的数据。
谢谢。
【问题讨论】:
【参考方案1】:我想知道为什么 previousNode 在代码中被初始化为 nullptr 两次?一次还不够好吗?
一次就好了。第二个分配是多余的。
另外,谁能给我一个例子,如果要存储的数据是字符或字符串,我们将如何将节点插入到列表中?
您将编写一个 Node 类型,其 value
成员可以存储您想要的类型(或使用 std::any
,或者像 std::list
那样将整个内容模板化到存储的类型上)。
由于在本例中的 while 循环中,它声明节点中的数据必须小于传递给函数的数据。
这不是它在做的事情:
//Skip all nodes whose value is less than num.
while (nodePtr != nullptr && nodePtr->value < num) ...
通过根据值选择插入位置来保持列表排序。 “跳过所有节点”这里的意思是“走过这些节点,以便新节点将在列表中跟随它们”
【讨论】:
【参考方案2】:我想知道为什么 previousNode 在代码中被初始化为 nullptr 两次?
没有理由。
一次还不够好吗?
是的。
【讨论】:
以上是关于C++链表插入节点,前一个节点初始化的主要内容,如果未能解决你的问题,请参考以下文章