0

我遇到了很多链表函数和 C 函数,它们打算将双指针代替单指针传递给函数。例如,下面这个函数用于在链表中进行排序插入:

    void sortedinsert(struct node **headref,struct node *newnode)
    {
           while(*headref!=NULL&&(*headref)->data<newnode->data)
                   headref=&((*headref)->next);
           newnode->next=headref;
           *headref=newnode;
    }

请向我解释一下使用双指针作为函数参数代替单指针,以及如何简化上述链表的编写函数?

4

3 回答 3

2

这个“双指针”是指向指针的指针。sortedinsert它允许函数在更新列表的头项时更新调用者的指针副本。

该行将*headref=newnode;调用者的指针更新为指向newnode。(顺便说一句,我认为代码有问题。看起来headref总是设置为newnode,无论插入的列表位置如何newnode。)

请注意,在这种情况下,您可以通过更改函数以返回指向列表头部的指针来避免使用指向指针的指针。

于 2013-01-15T16:39:54.597 回答
0

请注意,如果您使用的是 C++,则可以通过headref引用传递,因此相同的代码会更简单。它的作用完全相同,但更简单:

    void sortedinsert(struct node* &headref,struct node *newnode)
    {
           while(headref!=NULL && headref->data < newnode->data)
                   headref = headref->next;
           newnode->next = headref;
           headref = newnode;
    }
于 2013-01-15T16:47:02.773 回答
0

sortedinsert函数接受一个指向链表头指针的指针和一个指向新节点的指针。

链表头只是一个指针,但在这个函数中是一个“指向指针的指针”,因为该函数正在改变链表头的位置。

新节点被添加到列表中的排序位置,并且头部似乎总是被修改为指向最新的节点。

于 2013-01-15T16:42:04.037 回答