输入一个链表,从尾到头打印链表每个节点的值。
代码时参考剑指offer这本书写的:在牛客网上的参数会有些不同,改一下就行了。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
#include<stack>
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector <int> a;
stack<ListNode*> nodes;
ListNode* pNode = head;
while (pNode != NULL) {
nodes.push(pNode);
pNode = pNode->next;
}
while (!nodes.empty()) {
pNode = nodes.top();
a.push_back(pNode->val);
nodes.pop();
}
return a;
}
};
测试要考虑三种情况:
int main() {
//1->2->3->4->5
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ListNode* pNode5 = CreateListNode(5);
ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5);
PrintListReversingly_Iteratively(pNode1);
//只有一个结点的链表
ListNode* pNode = CreateListNode(1);
PrintListReversingly_Iteratively(pNode);
//空链表
PrintListReversingly_Iteratively(NULL);
return 0;
}