题解 | #牛牛的单向链表#
牛牛的单向链表
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; }