gpt4 book ai didi

c - C中双向链表的实现(删除任意位置的节点)

转载 作者:行者123 更新时间:2023-11-30 17:19:14 26 4
gpt4 key购买 nike

我有这个函数可以删除双向链表任意位置的节点。如果只有一个节点,它可以正常工作。我尝试插入 3 个节点,然后删除最后一个,它就卡住了。

以下是我使用的函数:

int getpos(char ln[20])
{
int pos=1;

temp3=h;
if(temp3 == NULL)
{
printf("List empty");
return;
}

while(temp3->next!=NULL)
{
if(strcmp(temp3->lname,ln)==0)
{
break;
}
else
{
pos++;
}
}

return pos;
}

获取待删除节点位置的函数。

void del()
{
int i = 1, pos=0;
char ln[20];
temp2 = h;


printf("enter lname: ");
gets(ln);

pos=getpos(ln);

if ((pos < 1) || (pos >= count + 1))
{
printf("\n Error : Position out of range to delete");
return;
}
if (h == NULL)
{
printf("\n Error : Empty list no elements to delete");
return;
}
else
{
while (i < pos)
{
temp2 = temp2->next;
i++;
}
if (i == 1)
{
if (temp2->next == NULL)
{
printf("Node deleted from list");
free(temp2);
temp2 = h = NULL;
return;
}
}
if (temp2->next == NULL)
{
temp2->prev->next = NULL;
free(temp2);
printf("Node deleted from list");
return;
}
temp2->next->prev = temp2->prev;
if (i != 1)
temp2->prev->next = temp2->next; /* Might not need this statement if i == 1 check */
if (i == 1)
h = temp2->next;
printf("\n Node deleted");
free(temp2);
}
count--;

}

删除节点的函数。

最佳答案

在函数 getpos 中,您没有递增 temp3->next,因此 while 循环将永远运行。

顺便说一下,一个简单的调试尝试就可以让您免去提出这个问题的麻烦。

关于c - C中双向链表的实现(删除任意位置的节点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28925200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com