如何使用函数在链表中插入元素?

时间:2014-02-25 17:31:32

标签: c++ c insert linked-list

我正在使用以下代码,但它显示错误:在* token之前的预期构造函数,析构函数或类型转换。 它显示了函数原型和函数声明行中的错误。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

node *insert(node *head);    // the compiler is showing error here

main()
{
  int dat;
  char x,ch;
  struct node_type
  {
    int data;
    node_type *next;
  };

  typedef struct node_type node;

  //   node *head;
  node *temp;

  // head= NULL;
  temp=NULL;
  printf("do u wanna enter a new node? \n");
  scanf("%c", &x);
  if (x=='y' or x=='Y')
  {

    temp=(node *)malloc(sizeof(node));
    printf("enter the data: \n");
    scanf("%d ", &dat);

    temp->data= dat;
    temp->next = NULL;
  }

  printf("do u want to insert another element?\n");
  scanf("%c ", &ch);
  if( ch=='y' or ch=='Y')
  {
    insert(*temp);
  }

  getch();

}

node *insert(node *temp)
{
  int dat;
  char ch;
  node *new;

  new=(node *)malloc(sizeof(node));

  printf("enter the data: ");
  scanf(" %d ", &dat);
  new->data=dat;
  new->next=temp;
  temp=new;

  printf("do u want to insert another element?\n");
  scanf("%c ", &ch);
  if (ch == 'y' or ch == 'Y')
  {
    insert(*temp);
  }
  else
    return temp;

}

错误是什么,如何纠正?

2 个答案:

答案 0 :(得分:1)

首先,您可以将node_type的定义移出主函数,高于insert函数的声明。该错误是因为编译器在第一次看到它时未知节点。所以在顶部有类似的东西:

struct node_type
{
  int data;
  node_type *next;
};

typedef struct node_type node;

node* insert(node *head);

这应该照顾你问的问题,但是还有一些你需要照顾的问题:

  1. 当您调用insert时,不应取消引用该参数,因为该函数需要一个指针。例如,你应该改为:

    if ( ch=='y' or ch=='Y')
    {
       //insert(*temp);
       insert(temp);
    }
    
  2. insert中,您有一个名为node*的{​​{1}},但new实际上是一个实际上不应用于命名变量的关键字。您可以将其重命名为其他内容,它可能如下所示:

    new
  3. 希望这可以让你达到可以编译和测试你的程序的程度。

答案 1 :(得分:1)

代表C

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iso646.h>

typedef struct node_type {
    int data;
    struct node_type *next;
} node;

node *insert(node **head);

node *new_node(void){
    int dat;
    node *new=(node *)malloc(sizeof(node));

    printf("enter the data: ");
    scanf(" %d", &dat);
    new->data = dat;
    new->next = NULL;
    return new;
}

void print(node *np){
    while(np){
        printf("%d ", np->data);
        np = np->next;
    }
    printf("\n");
}

int main(){
    int dat;
    char ch;

    node *temp = NULL;

    printf("do u wanna enter a new node? \n");
    scanf("%c", &ch);
    if (ch=='y' or ch=='Y') {
        temp=new_node();
    }

    printf("do u want to insert another element?\n");
    scanf(" %c", &ch);
    if( ch=='y' or ch=='Y'){
        insert(&temp);
    }
    print(temp);
    getch();
    return 0;
}

node *insert(node **temp){
    int dat;
    char ch;
    node *new = new_node();

    new->next=*temp;
    *temp=new;

    printf("do u want to insert another element?\n");
    scanf(" %c", &ch);
    if (ch == 'y' or ch == 'Y'){
        insert(temp);
    }
    return *temp;
}