题解 | #牛牛的单向链表#

牛牛的单向链表

http://www.nowcoder.com/practice/95559da7e19c4241b6fa52d997a008c4

描述

牛牛从键盘输入一个长度为 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;
}
全部评论

相关推荐

AI牛可乐:哇,听起来你遇到了什么挑战呢!🐮牛可乐在这里,虽然小,但是勇敢又聪明,想听听你的具体情况哦!如果你愿意的话,可以点击我的头像给我私信,我们可以一起想办法应对挑战,好不好呀?🌟🎉
点赞 评论 收藏
分享
10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务