题目描述
构建一个单向链表,链表中包含一组整数数据。输出链表中的所有元素。
要求:
1. 使用自定义的链表数据结构
2. 提供一个 linkedList 类来管理链表,包含构建链表和输出链表元素的方法
3. 在 main 函数中,创建一个包含一组整数数据的链表,然后调用链表的输出方法将所有元素打印出来
输入描述
包含多组测试数据,输入直到文件尾结束。
每组的第一行包含一个整数 n,表示需要构建的链表的长度。
接下来一行包含 n 个整数,表示链表中的元素。
输出描述
每组测试数据输出占一行。
按照顺序打印出链表中的元素,用空格隔开,最后一个元素后没有空格。
输入示例
5
1 2 3 4 5
6
3 4 5 6 7 8
输出示例
1 2 3 4 5
3 4 5 6 7 8
副露的弱智想法:
这个真一点不懂了哥几个,让我们先来看看基础知识再想这玩意怎么做吧。
复活,正好算法方面也学习到这,尝试手写一下:先贴个成熟代码在这,等我回来看看我写的答辩
#include<iostream>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(int x):val(x),next(nullptr){}
};
//int x表示定义一个接受整数参数x的名称为ListNode的构造函数
//表示初始化列表开始,val(x)表示链表数据域的值被初始化为传递的参数 x
//next(nullptr)则表示指针被初始化为nullptr,表示没有下一个节点。
int main(){
int n,val;
ListNode *xuninode = new ListNode(0);
while(cin >> n){
ListNode *cur = xuninode;
for(int i=0;i<n;i++){
cin >> val;
ListNode *newnode = new ListNode(val);
cur -> next = newnode;
cur = cur -> next;
}//经典的添加节点操作
cur = xuninode;//恢复到初始处
while(cur->next != NULL){
cout << cur->next->val << ' ';
cur = cur->next;
}
cout << endl;
}
}
我回来了,写的依托,打开一看十几个错误:
#include<iostream>
using namespace std;
struct ListNode{
int val;
ListNode *next;//(下一个链表节点的地址,用next)
// ListNode(val):int val,ListNode *node 这在写鸡毛
ListNode(int x):val(x),next(nullptr){}
};//定义新节点构造方法,记得分号
int main(){
int n,val;
ListNode *xuni = new ListNode(0);//定义虚拟节点
while(cin >> n){//当有n输入的时候
// ListNode *cur;//定义一个指向最前节点的指针
// cur -> next = xuni;
ListNode *cur = xuni;
for(int i=0;i<n;i++){
cin >> val;
ListNode *newnode = new ListNode(val);
cur -> next = newnode;
cur = cur ->next;
}//添加节点的经典方法
//处理完链表之后要把cue指针调回链表头
cur = xuni;
while(cur->next != NULL){
// if(cur->next == NULL){ 这里要使用多次,向前推进遍历
cout << cur->next->val << " ";
cur = cur ->next;//继续往前走
}//如果碰到指向NULL的,说明这一次的n个数已经处理完了
cout << endl;
}
}
至少基本掌握了怎么回事了:(