在C中操纵链表

时间:2014-03-10 21:06:03

标签: c pointers linked-list

为什么我们必须将指针传递给操纵链表的指针?为什么我们不能只传递指针?我只是不理解逻辑上发生的事情的内部。

我认为通过指向列表的指针就足够了,但显然不是。

3 个答案:

答案 0 :(得分:1)

这取决于你的链表实现,但是为了论证,如果你已经实现了一个push函数,就像这样:

typedef struct linked_list linked_list;

struct linked_list
{
    int value;
    linked_list *next;
};

void push(linked_list **head, int value)
{
    linked_list *temp = *head;
    *head = malloc(sizeof(linked_list));
    (*head)->value = value;
    (*head)->next = temp;
}

然后指向指针的指针是必要的,否则,你将修改push的本地head变量,而不是调用者。

答案 1 :(得分:0)

在C中,如果要传递可能由函数修改的参数,则将指针传递给包含修改值的变量:

 void swap(int *i, int *j) // modifies the two parameter.

现在,如果此参数本身是指针,则必须将指针传递给指针。例如,将单元格插入列表前面的函数插入。如果将列表表示为指向其第一个元素的指针,则必须修改此指针。所以你传递一个指向它的指针:

typedef struct cell *list

void insert(list *pl, struct cell *pc)
                  ^^

由于list是指针本身,因此它是指向指针的指针,因为list *struct cell **相同。

答案 2 :(得分:0)

这个

没有一行答案

请查看本文档中的第12页(push()):http://cslibrary.stanford.edu/103/LinkedListBasics.pdf

根据我的最佳解释。