📜  在 C++ 中打印链表逆序(1)

📅  最后修改于: 2023-12-03 15:07:37.852000             🧑  作者: Mango

在 C++ 中打印链表逆序

在 C++ 中,我们可以使用指针来操作链表结构,可以通过遍历链表获取每个节点的值,也可以通过反转链表来打印链表逆序。

遍历链表获取每个节点的值

遍历链表获取每个节点的值的基本思路是,从头节点开始,依次遍历链表,将每个节点的值存储到一个 vector 中,再将 vector 中的元素倒序输出即可。

#include <iostream>
#include <vector>

using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

void printListReverse(ListNode* head) {
    vector<int> res;
    ListNode* p = head;
    while(p != NULL) {
        res.push_back(p->val);
        p = p->next;
    }

    for(int i = res.size() - 1; i >= 0; i--) {
        cout << res[i] << " ";
    }
}
反转链表打印链表逆序

反转链表的基本思路是,将当前节点的 next 指针指向上一个节点,再将当前节点指向下一个节点,直到遍历到链表的末尾。反转后,从头节点开始依次遍历链表即可打印链表逆序。

#include <iostream>

using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

ListNode* reverseList(ListNode* head) {
    ListNode *pre = NULL, *cur = head, *temp;
    while(cur != NULL) {
        temp = cur->next;
        cur->next = pre;
        pre = cur;
        cur = temp;
    }
    return pre;
}

void printListReverse(ListNode* head) {
    ListNode* p = reverseList(head);
    while(p != NULL) {
        cout << p->val << " ";
        p = p->next;
    }
}

以上就是在 C++ 中打印链表逆序的两种方法,根据实际情况选择合适的方法进行使用。