【问题标题】:C++ Linked Lists Inserting a Node, Previous Node intializationC++链表插入节点,前一个节点初始化
【发布时间】: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 循环中,它声明节点中的数据必须小于传递给函数的数据。

谢谢。

【问题讨论】:

    标签: c++ linked-list insert nodes nullptr


    【解决方案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 两次?

      没有理由。

      一次还不够好吗?

      是的。

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-26
        • 2021-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多