创建新节点并将其添加到链接列表

时间:2014-03-30 13:31:27

标签: c++ linked-list

很难理解这个节点是如何创建的,你能否逐步写出这组代码实际在做什么,以及它们代表什么动作?

void list::create_node(int value)       
{
    struct node *temp;// Please write in words the meaning of this statement  
    temp = new(struct node);// is this a dynamic node? )    
    temp->info = value;// is this value being assigned to this node?

    if (last == NULL)// what is this set of code testing??
    {    
        last = temp;//  who is this last; the node which has been created?    
        temp->next = last;  // is the node pointing to itself being only one node?
    }
    else
    {
        temp->next = last->next;((( // What is this statement saying?   
        last->next = temp;//  What is this statement saying?   
        last = temp;// What is this statement saying?
    }
}

1 个答案:

答案 0 :(得分:2)

void list::create_node(int value)       
{

上面的行声明了一个函数,该函数创建具有给定值的节点并将该节点插入列表中。必须检查代码以查看新节点的插入位置。

struct node *temp;

声明指向节点的指针。尚未分配内存,只有稍后将使用的指针。

temp = new(struct node);

从动态(运行时)内存区域(a.k.a. heap)为节点分配内存。如果存在构造函数,则调用node结构的构造函数来初始化内存。

指针temp现在指向node对象。

temp->info = value;

这会将value分配给数据字段info。需要声明struct node以确认此猜测。

if (last == NULL)
{

假设last是指针并指向最后一个节点,则此检查将查找空列表。常见的实现是将指针值设置为null以标记列表的结尾。

    last = temp;   
    temp->next = last; 
}

上面的代码将新node作为最后一个节点插入。 last指针允许快速访问列表的末尾。这允许反向迭代,而不必遍历所有链接以找到最后一个节点。

某些实现将next字段设置为null以指示列表的结尾,其他类似于此字段,使其指向最后一个节点。

else
{
    temp->next = last->next;

此时,列表不为空 使新节点指向最后一个节点指向的同一节点 通过绘制指向节点的节点框和箭头可以最好地理解这一点。

    last->next = temp;

更新最后一个节点以指向自身。见上一节。

    last = temp;

更新指向最后一个(列表结尾)节点的指针以指向新节点。     } }

我建议您绘制链接列表并多次浏览此算法以查看其工作原理。另请查看单链表数据类型。

最后一个节点的循环引用可能会让您感到困惑。这可能不是大多数书籍描述的标准实现,但它是有效的。