2014-10-11 62 views
0

好了,所以这是我迄今为止解决分配不兼容的类型......如何使用节点指针以建立一个链表

typedef struct node{ 
int *next; 
int val; 
}node; 
void pqPrint(){ 
node *current=front; 
printf("Queue Contains:"); 
while(current->next!=NULL){ 
printf(" %d ", current->val); 
node temp; 
temp.next=current->next; 
current->next=temp; 
} 
printf("\n"); 
} 

我不断收到上述错误与current->next=temp;

+2

'temp'不是指针。 – BLUEPIXY 2014-10-11 22:02:28

+2

,因为“temp”不是指针。为什么你甚至需要它?这看起来真的很糟糕。为什么你的下一个指针是“int *”而不是“node *”? – OldProgrammer 2014-10-11 22:03:44

回答

2

我在您的描述中没有发现任何错误,但无论如何,这里有几件事要做。我写了一个基于你上面的列表一个完整的程序:

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

typedef struct node{ 
    struct node *next; 
    int val; 
}node; 

node *front; 

void pqPrint() { 
    node *current=front; 
    printf("Queue Contains:"); 
    while(current != NULL){ 
     printf(" %d ", current->val); 
     current = current->next; 
    } 
    printf("\n"); 
} 

void main(void) 
{ 
    front = malloc(sizeof(front)); 
    front->val = 10; 
    front->next = NULL; 
    pqPrint(); 
} 

几点意见:1。 在结构中的下一个元素不应该是int类型,大多数编译器会抱怨。 2.您需要声明一个列表作为开头,并初始化它。 3.您需要为列表中的每个元素分配内存,通常使用malloc(),但请注意,我的示例不验证结果(在现实生活中,您必须检查malloc()的NULL返回值)。 4.如果你有一个指向左边的指针,你需要使用 - >(not。)来引用指针指向的结构中的单独元素。 5.我想你的临时变量只是困惑你,所以我删除它。请注意,在你的例子中,你总是会错过第一个元素。

0

首先,你的下一个不应该是一个int指针,大多数编译器会警告你。它应该是一个struct node*。其次,你试图将一个完整的节点对象分配给一个POINTER。它们是2种完全不同的数据类型。让你的temp为Node *,它应该可以工作

相关问题