描述
牛牛从键盘输入一个长度为 n 的数组,问你能否用这个数组组成一个链表,并顺序输出链表每个节点的值。
输入描述:
第一行输入一个正整数 n ,表示数组的长度
第二行输入 n 个正整数,表示数组中每个元素的值
输出描述:
制作一个链表然后输出这个链表的值
示例
输入:
4
5 4 2 1
输出:
5 4 2 1
说明:请实现链表后再遍历输出结果!
题解
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//单向循环链表
typedef struct node {
int data;
struct node* next;
} node;
//创建头节点
node* add_head() {
node* Head = (node*)malloc(sizeof(node));
if (Head == NULL)
return NULL;
Head->next = Head;
return Head;
}
//尾插法
void add_node(node* Head, int data) {
node* new = (node*)malloc(sizeof(node));
if (new == NULL)
return;
//节点成员赋值
new->data = data;
new->next = NULL;
//链接
node* pT = NULL;
for (pT = Head; pT->next != Head; pT = pT->next);
new->next = pT->next;
pT->next = new;
}
//输出链表
void output(node* Head) {
if (Head->next == Head)
return;
node* pT = Head->next;
while (pT != Head) {
printf("%d ", pT->data);
pT = pT->next;
}
}
int main() {
int n;
scanf("%d", &n);
node* Head = add_head();//头节点
//动态内存分配
int* array = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &array[i]);
}
//将数据插入链表
for (int j = 0; j < n; j++) {
add_node(Head, array[j]);
}
output(Head);
free(array);//释放内存
array = NULL;//防止悬空指针
return 0;
}