【发布时间】:2015-08-23 14:36:10
【问题描述】:
请指出代码中的错误。
函数insertatend()第一次插入,但不再插入。
我正在尝试在循环链表的末尾插入一个节点,但是在第一次插入一个元素后,如果我们再次尝试输入数据,它就会卡在 while 循环中。
struct node {
int data;
struct node *next;
};
typedef struct node node;
node *head = NULL;
node *insertatend(node *head, int value)
{
node *temp, *p;
p = head;
temp = (node *)malloc(sizeof(node));
temp->data = value;
temp->next = head;
if (head == NULL)
{
head = temp;
}
else
{
while (p->next != head)
p = p->next;
p->next = temp;
}
return head;
}
void display(node *head)
{
node *p = head;
if (head == NULL)
{
printf("\nlinked list is empty\n");
return;
}
while (p->next != head)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int ch = 1, value;
while (ch)
{
printf("1.Insert 2.Display");
scanf("%d", &ch);
switch (ch)
{
case 1:
printf("enter an element:");
scanf("%d", &value);
head = insertatend(head, value);
break;
case 2:
display(head);
break;
}
}
return 0;
}
【问题讨论】:
-
循环 链表的“结束”必须是我听过的最模糊的概念之一。我说的含糊而不仅仅是愚蠢,因为你显然知道你的意思——但不管它是什么,这绝对不是它的名字。
-
temp=(node*)malloc(sizeof(node)) ... 你要 free() tmp 吗?你真的需要转换 malloc() 吗?
-
@Michi 肯定不在
insert函数中。 -
@WhozCraig 从我在这里看到的,我们有一个最小的程序。所以我只是问。
-
如果是这么小的程序,请帮我指出错误
标签: c pointers linked-list insert circular-list