我需要通过递归void函数遍历一个列表,该列表由一个函数中间的参数与一个三重指针的参数链接。
程序如下
typedef struct node
{
int data;
struct node* next;
}Node;
void insert(Node** first,int d){
Node* new= createNode(d);
new->next= *first;
*first=new;
}
Node* createNode(int d){
Node* new= (Node*)malloc(sizeof(Node));
new->data= d;
new->next=NULL;
return new;
}
void printList(Node***p)
{
Node**temp = *p;
if(temp == NULL)
return;
else
{
printf("\nValue: %d", (*temp)->data);
*temp = (*temp)->next;
printList(&temp);
}
}
int main()
{
Node *first = NULL;
int n =10;
while(n>0){
insert(&first,n);
n=n-1;
}
Nodo **ptr_first= &first;
printList(&ptr_first);
return 0;
}
该函数打印所有值,但是程序挂起并返回负值。此实现有什么问题? PD:三重指针的使用仅用于教学目的
答案 0 :(得分:1)
您的递归终止条件错误。
您将if(temp == NULL)
更改为if(*temp == NULL)
,因为*temp
指向元素而不是temp
。
我还认为,如果您使用三重指针,则对教学没有好处,因为这里不需要它们。