下面是在雙鏈表中插入節點的代碼。雙鏈表列指針混淆
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;
}
}
}
我在作爲新手的底層指針操作中有些困惑。一個**頭被傳遞給函數來修改它。但是,當位置> 1時,與位置== 1的情況相比,使用* head(temp)的副本來修改列表。有人可以解釋我爲什麼這樣嗎?
由於
在一種情況下,您只需要修改'* head'指向的內容。另一方面,你需要修改指針本身。 (用紙盒和箭頭在紙上畫兩個盒子,你會明白爲什麼。) –