#include <iostream>
#include<malloc.h>
#include<stdlib.h>
using namespace std;
typedef struct LNode {
int data;
struct LNode*next;
}LNode,*LinkList;
void CreatList(LinkList *L, int n);
void ListTraverse(LinkList L);
int main() {
LinkList L;//链表名字
int n;
cout << "请输入链表长度" << endl;
cin >> n;
CreatList(&L,n);
ListTraverse(L);
return 0;
}
void CreatList(LinkList *L,int n) {//创建链表的长度并对其赋值
*L=(LinkList)malloc(sizeof(LNode));//首元素的地址传递个头指针
(*L)->next = NULL;
LinkList p;
p = (*L);
int i;
if (n < 0) {
cout << "链表长度有误" << endl;
exit(0);//异常退出
}
if(n>0)
for (i = n; i > 0; i--) {
p->next = (LinkList)malloc(sizeof(LNode));/*p->next==(*L)->next
把首节点的地址存放在头节点的指针域里*/
cin >> (p->next->data);//加个括号,取地址
p->next->next = NULL;
p = p->next;//p指向首节点
}
}
void ListTraverse(LinkList L) {
int i = 1;
if (L->next == NULL) {
cout << "链表为空" << endl;
return;
}
cout << "链表元素如下" << endl;
while (L!=NULL) {
if (i != 1)
cout << L->data<<" ";
L = L->next;
i++;
}
}
代码参考b站up:困了吃颗糖
另一种实现方式:
#include<iostream>
using namespace std;
struct Node{
int data;
Node* next = NULL;
Node(int a){
data = a;
}
};
void add(Node*s,Node*p){
Node*temp=s;
while(temp->next!=NULL){
temp=temp->next;
}
temp->next=p;
}
void print(Node*s){
Node*temp=s;
while(temp!=NULL){
cout<<temp->data<<" ";
temp=temp->next;
}
}
int main(){
int m;
cin>>m;
Node*s = new Node(m);
for(int i=0;i<5;i++){
cin>>m;
Node*p=new Node(m);
add(s,p);
}
print(s);
return 0;
}