2013-01-09 138 views
1

我必须为作业2链接列表做准备,将第一个用户给出的整数放在第一个中,然后将第一个到第二个列表中的每个整数的结果放在结果= x^3中。在下面的代码中,我试图打印我放入第一个列表中的内容,并使用scanf进行阅读。我还没有理解为什么我不能通过这种方式打印。你能解释一下吗?提前致谢!!问题是,我只打印最后一个元素和0 ...:■在c中打印链接列表

代码:

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

struct L1 
{ 
    int x; 
    struct L1 *next1; 
}; 

struct L2 
{ 
    int x,i,v; 
    struct L2 *next2; 
}; 

int main() 
{ 
    int i,N; 
    struct L1 *root1; 
    struct L2 *root2; 
    struct L1 *conductor1; 
    struct L2 *conductor2; 

    root1 = malloc(sizeof(struct L1)); 
    root2 = malloc(sizeof(struct L2)); 
    root1->next1=0; 
    conductor1 = root1; 
    printf("Dwste arithmo N"); 
    scanf("%d",&N); 
    printf("\nDwse arithmo"); 
    scanf("%d",&conductor1->x); 
    printf("%d",conductor1->x); 

    for(i=0; i<N; i++) 
    { 
     conductor1->next1 = malloc(sizeof(struct L1)); 
     printf("\nDwste arithmo"); 
     scanf("%d",&conductor1->x); 
     conductor1->next1=0; 
    } 
    conductor1 = root1; 
    while (conductor1 != NULL) 
    { 
     printf("\n%d",conductor1->x); 
     conductor1=conductor1->next1; 
    } 

    return 0; 
} 
+2

您究竟遇到什么问题?不会编译,崩溃,错误信息? – antlersoft

+0

是啊我编辑它xD对不起.. – alex777

回答

3

for循环,你永远不会改变的conductor1值。所以它总是指向头节点,并且你总是会覆盖该节点的字段。在每次迭代中分配新节点前进到下一个节点后,您需要添加conductor1=conductor1->next1;

+0

改变它,你的意思是? conductor1 = conductor1-> NEXT1; – alex777

+0

@ alex777:是的,在'malloc'之后。 – interjay

+0

哦thx ..就是这样! – alex777