【发布时间】:2013-12-20 18:17:49
【问题描述】:
下面是在双向链表中插入节点的代码。
struct dllist
{
int data;
struct dllist *prev, *next;
};
void DLLInsert(struct dllist **head, int position, int data)
{
int k = 1;
struct dllist *temp, *newNode;
newNode = (struct dllist *)malloc(sizeof(struct dllist));
if (!newNode)
{
printf("Memory Error\n");
}
newNode->data = data;
if (position == 1)
{
newNode->next = *head;
newNode->prev = NULL;
*head = newNode;
return;
}
else
{
temp = *head;
while (temp->next != NULL && k < position - 1)
{
k++;
temp = temp->next;
}
if (temp->next == NULL)
{
temp->next = newNode;
newNode->prev = temp;
newNode->next = NULL;
}
else
{
newNode->prev = temp;
newNode->next = temp->next;
temp->next = newNode;
temp->next->prev = newNode;
}
}
}
作为新手,我对底层指针操作感到有些困惑。 **head 被传递给函数以对其进行修改。但是在 position>1 的情况下,与 position==1 的情况相比,使用 *head(temp) 的副本来修改列表。谁能解释一下为什么会这样?
谢谢
【问题讨论】:
-
在一种情况下,您只需要修改
*head所指向的内容。另一方面,您需要修改指针本身。 (用方框和箭头在纸上画出这两个案例,你就会明白为什么了。)
标签: c pointers linked-list