学习链接列表C.

时间:2013-11-20 19:56:55

标签: c linked-list

我正在试图弄清楚链接列表,我正在尝试制作一个链接列表,每个节点中有2个项目,但我无法让它打印正确,我不知道我是什么我做错了。

这是我的代码:

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

struct node
{
    int num;
    char word[30];
    struct node *next;
};

int main(void)
{
    struct node *learn = NULL;
    struct node *temp;
    struct node *temp1, *p;
    int q, i = 0;
    char word1[30];

    while (i != 7)
    {
        printf("Enter a number: ");
        scanf("%d", &q);
        temp = (struct node *) malloc(sizeof(struct node));
        temp->num = q;
        temp->next = NULL;
        temp1 = p = learn;
        while (temp1 != NULL)
        {
            p = temp1;
            temp1 = temp1->next;
        }
        if (p != NULL)
            p->next = temp;
        else
            learn = temp;
        i++;
    }

    i = 0;
    while (i != 7)
    {
        if (i == 0)
        {
            int c;
            do
            {
                c = getchar();
            } while (c != '\n' && c != EOF);
        }
        printf("\nEnter a word: ");
        fgets(word1, 30, stdin);
        temp = (struct node*)malloc(sizeof(struct node));
        strcpy(temp->word, word1);
        temp->next = NULL;
        temp1 = p = learn;
        while (temp1 != NULL)
        {
            p = temp1;
            temp1 = temp1->next;
        }
        if (p != NULL)
            p->next = temp;
        else
            learn = temp;
        i++;

    }

    while (learn != NULL)
    {
        printf("%d\n", learn->num);
        learn = learn->next;
    }
    while (learn != NULL)
    {
        printf("%s", learn->word);
        learn = learn->next;
    }
}

这是我输入的内容:

Enter a number: 1
Enter a number: 2
Enter a number: 3
Enter a number: 4
Enter a number: 5
Enter a number: 6
Enter a number: 7

输入一个单词:a

输入字词:b

输入字词:c

输入字词:d

输入一个词:e

输入一个词:f

输入一个词:g

这就是我得到的:

1
2
3
4
5
6
7
0
0
0
0
0
0
0

我知道我做错了什么,我只是不知道是什么。

2 个答案:

答案 0 :(得分:2)

底部的第一个while循环遍历整个列表。 “learn”在第一个while循环结束时为NULL,因此第二个循环从不打印任何内容。

答案 1 :(得分:0)

为列表的元素分配两次内存。相反,你应该只分配一次,在第二个循环中你应该只使用strcpy或simillar添加字符串,或者你可以在同一个循环中读取数字和字符串。

相关问题