我试图在给定的链表中插入一个元素,但当我想打印它时,它会显示无限循环。在insert()调用中,我传递指针的地址,而在display中,我只传递指针中存储的地址。帮我plz
#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程序,请正确分类
- 在代码中不使用任何C++模块
使用C实现-
我认为在链表的简单插入中不需要双指针。你可以做的是-
void insert(node *head, int data){
node *temp= malloc(sizeof(struct node));
temp->item = data;
temp->ptr= NULL;
if(head==NULL){ //empty list
head=temp;
}
else {
while(head->ptr!=NULL){ //traverse till end
head=head->ptr;
}
head->ptr=temp;
}
}
并从主函数调用作为insert(头,值);