Ниже приведен код для вставки узла в двусвязный список.Двунаправленный список указателей Путаница
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, копия * head (temp) используется для изменения списка по сравнению со случаем, когда позиция == 1. Может ли кто-нибудь объяснить мне, почему это так?
Благодаря
В одном случае вам нужно только изменить то, на что указывает указатель '* head'. В другом случае вам нужно изменить сам указатель. (Нарисуйте два случая на бумаге с помощью ящиков и стрелок, и вы поймете, почему.) –