递归方法遍历链表

时间:2018-07-26 23:24:02

标签: c pointers recursion

我需要通过递归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:三重指针的使用仅用于教学目的

1 个答案:

答案 0 :(得分:1)

您的递归终止条件错误。

您将if(temp == NULL)更改为if(*temp == NULL),因为*temp指向元素而不是temp

我还认为,如果您使用三重指针,则对教学没有好处,因为这里不需要它们。