一 c语言实现
/**
* @file CreateList.cpp
* @author Crazyfox
* @brief c语言实现链表创建
* @version 1.0
* @history
* 1.Date: 2021-07-15
* Version: 1.0
* Modification: First release
* @copyright Copyright (c) 2021
*
*/
#include <stdio.h>
#include <stdlib.h>
/**
* 单链表结点
*/
struct ListNode {
int data;
struct ListNode* next;
};
/**
* @brief 尾插法创建不带头结点的单链表
* @param array 数据数组
* @param sz 数组有效尺寸
* @return 创建的单链表的头指针
*/
ListNode* CreateList(int array[], int sz) {
ListNode* guard = (ListNode*)malloc(sizeof(ListNode)); //哨兵结点
guard->next = NULL;
ListNode* back = guard;
for (int i=0; i<sz; ++i) {
ListNode* cur = (ListNode*)malloc(sizeof(ListNode));
cur->data = array[i];
back->next = cur;
back = cur;
}
back->next = NULL;
return guard->next;
}
/**
* @brief 打印单链表
* @param head
*/
void PrintList(ListNode* head) {
while (head) {
printf("%d ", head->data);
head = head->next;
}
}
int main(int argc, char** argv) {
// 0.处理输入数据
int data_array[100];
int sz = 0;
while (scanf("%d", &data_array[sz++]) != EOF) {
if (getchar() == '\n') break;
}
// 1.创建链表
ListNode* head = CreateList(data_array, sz);
// 2.打印链表
PrintList(head);
return 0;
}
二 c++实现
/**
* @file CreateList2.cpp
* @author Crazyfox
* @brief c++实现链表创建
* @version 1.0
* @history
* 1.Date: 2021-07-15
* Version: 1.0
* Modification: First release
* @copyright Copyright (c) 2021
*
*/
#include <vector>
#include <iostream>
using namespace std;
/**
* 单链表结点结构体
*/
struct ListNode {
int data;
struct ListNode* next;
ListNode(int i) : data(i), next(nullptr) {}
};
/**
* @brief 创建单链表
* @param inputs 输入数据容器
* @return 创建的单链表的头指针
*/
ListNode* CreateList(const vector<int> &inputs) {
ListNode* guard = new ListNode(0);
ListNode* back = guard;
for (const auto &m : inputs) {
ListNode* cur = new ListNode(m);
back->next = cur;
back = cur;
}
return guard->next;
}
/**
* @brief 打印单链表
* @param head 单链表头指针
*/
void PrintList(ListNode* head) {
while(head) {
cout << head->data << " ";
head = head->next;
}
cout << endl;
}
int main (int argc, char** argv) {
// 1.处理输入数据
vector<int> inputs;
int in;
while(cin >> in) {
inputs.push_back(in);
if(getchar() == '\n') break;
}
// 2.创建链表
ListNode* head = CreateList(inputs);
// 3.打印链表
PrintList(head);
return 0;
}
|