[蓝蓝计算机考研算法训练二期]-day05
8、day05-计算字符的个数
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
示例1
输入:
{1,2,3}
返回值:
[3,2,1]
示例2
输入:
{67,0,24,58}
返回值:
[58,24,0,67]
1、思路
2、具体实现
3、小结 示例2
输入:
{67,0,24,58}
返回值:
[58,24,0,67]
using namespace std;
//定义链表节点
typedef struct LNode {
int data; // 数据域
LNode* next; // 指针域
LNode(int val) : data(val), next(nullptr) {}; // 构造函数
} LNode, * ListLink;
// 采用带虚拟头节点的头插法创建链表,用空格隔开各个节点数据,回车结束链表创建
ListLink ListHeadInsert1() {
LNode* dummyHead = new LNode(-1), * s, * tmp; // 虚拟头节点(统一插入操作) 待插入新节点指针 临时节点指针
int val;
char ch; // 待插入节点的数据
while (cin >> val) {
s = new LNode(val); // 创建待插入的新节点
s->next = dummyHead->next; // 插入节点
dummyHead->next = s;
if ((ch = cin.get()) == '\n') break; // 结束条件
};
tmp = dummyHead->next; // 真正的头节点
delete dummyHead; // 释放虚拟头节点
return tmp; // 返回真正的头节点
}
// 测试一下
int main() {
ListLink L = ListHeadInsert1(); // 创建链表
LNode* cur = L; // 遍历指针
while (cur) { // 遍历打印节点
cout << cur->data << ' ';
cur = cur->next;
}
return 0;
}