[蓝蓝计算机考研算法训练二期]-day05

53 阅读1分钟

[蓝蓝计算机考研算法训练二期]-day05

8、day05-计算字符的个数

输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。

如输入{1,2,3}的链表如下图:

img

返回一个数组为[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;
}