有序链接列表插入-如果其他语句

时间:2018-12-08 10:37:01

标签: c++ linked-list insertion

这部分代码让我感到困惑:

if (newitem >= first->info)//e.g., 25 > 3
             {
               newNode->link = first->link;
               first->link = newNode;
               first = newNode;
           }     

^^^^^^^^^^^^^^^^^^^^^^^^^

我很困惑,因为我想知道当您从插入节点创建链接列表时,“第一个”最终指向何处?它是否指向链接列表中的最后一个节点?

这也是声明:

 template <class Type>
 struct nodeType
 {
     Type info;
     nodeType<Type> *link;
 };

在类的保护区域中,第一个被声明为指针:

 nodeType<Type> *first;

为什么首先声明为节点而不是常规指针?我以为它将指向链接列表中的第一个节点。

这是我的教授作为演示提供的插入功能,它是模板类的较大演示的一部分:

void insertNode(const Type& newitem)
{
    nodeType<Type> *current; //pointer to traverse the list
    nodeType<Type> *trailCurrent; //pointer just before current
    nodeType<Type> *newNode;  //pointer to create a node

    bool  found;

    newNode = new nodeType<Type>; //create the node

    newNode->info = newitem;   //store newitem in the node
    newNode->link = NULL;      //set the link field of the node
    //to NULL

    if (first == NULL)  //Case 1    e.g., 3
    {
        first = newNode;
        first->link = newNode;
        count++;
    }
    else
    {
        if (newitem >= first->info)//e.g., 25 > 3
        {
            newNode->link = first->link;
            first->link = newNode;
            first = newNode;
        }
        else
        {
            trailCurrent = first; //e.g., 1 < 3
            current = first->link;
            found = false;

            while (current != first && !found)
                if (current->info >= newitem)
                    found = true;
                else
                {
                    trailCurrent = current;
                    current = current->link;
                }

            trailCurrent->link = newNode;
            newNode->link = current;
        }

        count++;
    }//end else
}

仅通过单独使用此功能即可创建链表,但我尚未了解此功能。如果有人可以帮助解释它,那将大有帮助。谢谢。

0 个答案:

没有答案