描述

牛牛从键盘输入一个长度为 n 的数组,问你能否用这个数组组成一个链表,并顺序输出链表每个节点的值。

输入描述:

第一行输入一个正整数 n ,表示数组的长度

输出描述:

制作一个链表然后输出这个链表的值

思路:

很多人可能第一次看到这道题,就是写接口函数:打印函数、尾插函数,且在调用函数前要定义一个数组,使用scanf向数组内存数,然后再调用尾插函数,之后打印,但是这种写法比较麻烦,且时间复杂度较大。

这里推荐这样写:不用定义数组,直接scanf赋值插入到当前节点的data数据域上,之后向后遍历,一一赋值即可,最后打印链表即可!

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef int SLTDataNode;
typedef struct SListNode
{
    SLTDataNode data;
    struct SListNode* next;
}SListNode;
int main(void)
{
    int n = 0;
    scanf("%d", &n);
    SListNode* phead = NULL;
    int i = 0;
    for (i = 0; i < n; i++)
    {
        SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
        newnode->next = NULL;
        scanf("%d", &newnode->data);
        if (phead == NULL)
            phead = newnode;
        else
        {
            SListNode* tail = phead;
            while (tail->next != NULL)
            {
                tail = tail->next;
            }
            tail->next = newnode;
            tail = newnode;
        }   
    }
    SListNode* cur = phead;
    while (cur != NULL)
    {
        printf("%d ", cur->data);
        cur = cur->next;
    }
    return 0;
}