
如果我们将输出或者打印看做一个操作的话,那么这个问题是一个操作顺序与输入顺序相反的问题。这样的问题可以考虑使用递归算法或者用栈来存放输入数据。
1.递归
设置遍历指针访问到NULL时作为递归出口。然后将数据存入结果数组中。
具体代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void recursion(ListNode *head, vector<int> &ans){
if(!head) return;
recursion(head -> next, ans);
ans.push_back(head -> val);
}
vector<int> printListReversingly(ListNode* head) {
vector<int> ans;
recursion(head, ans);
return ans;
}
};
2.用栈存放输入输入数据
在按照顺序访问链表时,将每一个结点值存入一个栈当中。最后出栈顺序就是我们要的逆序输出的顺序。不过这里为了为了简化代码,我直接使用的向量及其相关方法。
具体代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<int> printListReversingly(ListNode* head) {
vector<int> ans;
ListNode *p = head;
while(p){
ans.push_back(p -> val);
p = p -> next;
}
return vector<int> (ans.rbegin(), ans.rend());
}
};
本文介绍两种实现链表逆序输出的方法:递归算法和利用栈的特性。递归法通过先递归到链表尾部再返回的方式,逆序填充结果数组;栈法则在遍历链表时将节点值压栈,最后出栈即得逆序结果。
6961

被折叠的 条评论
为什么被折叠?



