【发布时间】:2015-11-29 16:53:22
【问题描述】:
我试图在给定的链表中插入一个元素,但是当我想打印它时显示无限循环。在 insert() 调用中我传递指针的地址,而在显示中我只传递存储的地址在指针中。请帮帮我
#include<stdio.h>
struct node{
int item;
node *ptr;
};
int insert(node **head, int data, int position)
{
int count=1;
node *temp=malloc(sizeof(struct node));
temp->item=data;
temp->ptr=NULL;
node *p,*q;
p=*head;
if(*head==NULL)
{
*head=temp;
}
if(position==1)
{
temp->item=*head;
*head=temp;
}
else{
while(p!=NULL&&count<position)
{
count++;
q=p;
p=p->ptr;
}
q->ptr=temp;
temp->ptr=p;
}
}
void display(node *temp)
{
while(temp!=NULL)
{
printf("the data is %d",temp->item);
temp=temp->ptr;
}
}
void main()
{
node *head=malloc(sizeof(struct node));
insert(&head,29,1);
display(head);
}
【问题讨论】:
-
你不应该在 C++ 中使用 malloc。事实上,这可能应该被标记为 C。
-
您的格式/缩进需要工作。看起来你的调试器技能也不是很好:(
-
哦,是的...改用 C++ 容器类。
-
您对
position的意图是什么?如果链接列表只有 2 个元素,而您传入的位置为 5,该怎么办?您希望介于两者之间的元素成为有效节点吗? -
对不起它的 c 文件。假设我们在 position 中传递了一个有效且在范围内的值,例如如果你有 2 个元素,那么在 position 中传递的值可能是 1 或 2 或 3。
标签: c pointers linked-list