【发布时间】:2017-05-26 04:24:22
【问题描述】:
我的程序显示列表为空。我认为我在将节点重新链接到头部时犯了错误。帮我弄清楚。
void insert(struct node** headRef, int index, int Data)
{
int i, distanceFromHead = 1;
struct node* head = *headRef;
struct node* temp1 = (struct node*)malloc(sizeof(struct node)); //node to be inserted.
temp1->data = Data;
if(index == 0)
{
temp1->next = head;
head = temp1;
return;
}
while(head != NULL)
{
if(distanceFromHead == index)
{
temp1->next = head->next;
head->next = temp1;
*headRef = head;
return;
}
head = head->next;
distanceFromHead++;
}
}
【问题讨论】:
-
你认为
head = temp1;是做什么的? -
temp1的@pat地址分配给head -
那么
head会发生什么? -
head是函数的局部变量,在函数返回时终止。你应该分配给*headRef -
请注意,如果要求您在具有 3 个节点的列表中的第 10 位添加一个节点,则代码会泄漏新分配的节点。
标签: c linked-list