zoukankan      html  css  js  c++  java
  • 从尾到头打印链表

    从尾到头打印链表

    题目描述

    输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

    版本一: 没什么技术含量, 利用vector数组简单交换头尾数子

    /**
    *  struct ListNode {
    *        int val;
    *        struct ListNode *next;
    *        ListNode(int x) :
    *              val(x), next(NULL) {
    *        }
    *  };
    */
    class Solution {
    public:
        vector<int> printListFromTailToHead(ListNode* head) {
            vector<int> ret;
            ListNode *current = head;
            int low = 0;
            int high = 0;
            
            if (NULL == head) {
                return ret;
            }
            
            while (NULL != current) {
                ret.push_back(current->val);
                current = current->next;
            }
            
            high = ret.size() - 1;
            
            while (low < high) {
                ret[low] = ret[low] + ret[high];
                ret[high] = ret[low] - ret[high];
                ret[low] = ret[low] - ret[high];
                low++;
                high--;
            }
            
            return ret;
        }
    };
    

    版本二: 利用栈的先进后出的思想来交换头尾数字

    /**
    *  struct ListNode {
    *        int val;
    *        struct ListNode *next;
    *        ListNode(int x) :
    *              val(x), next(NULL) {
    *        }
    *  };
    */
    class Solution {
    public:
        vector<int> printListFromTailToHead(ListNode* head) {
            stack<int> sk;
            vector<int> ret;
            ListNode *current = head;
            
            while(NULL == head) {
                return ret;
            }
            
            while(NULL != current) {
                sk.push(current->val);
                current = current->next;
            }
            
            while(!sk.empty()) {
                ret.push_back(sk.top());
                sk.pop();
            }
            return ret;
        }
    };
    

    版本三: 利用递归, 源自牛客网

    /**
    *  struct ListNode {
    *        int val;
    *        struct ListNode *next;
    *        ListNode(int x) :
    *              val(x), next(NULL) {
    *        }
    *  };
    */
    class Solution {
    public:
        vector<int> dev;    
        vector<int> printListFromTailToHead(ListNode* head) {
            if(head!=NULL) {
              if(head->next!=NULL) {
                dev=printListFromTailToHead(head->next);
              }
              dev.push_back(head->val);
            }
            return dev;
        }
    };
    

    版本四: 自己在vs上写的, 不知道为何提交到牛客上不能通过

    #include <iostream>
    #include <stack>
    #include <vector>
    
    using namespace std;
    
    struct ListNode {
    	int val;
    	struct ListNode *next;
    };
    
    vector<int> ret;
    
    vector<int> printArray(ListNode* head, vector<int> &v) {
    	if (NULL != head->next) {
    		v = printArray(head->next, v);
    	}
    
    	v.push_back(head->val);
    	//cout << head->val << endl;
    
    	return v;
    }
    
    vector<int>& printListFromTailToHead(ListNode* head) {
    
    	ret = printArray(head, ret);
    	return ret;
    }
    
    void main(void) {
    	ListNode n1, n2, n3;
    	vector<int> ret;
    
    	n1.val = 1, n2.val = 2, n3.val = 3;
    	n1.next = &n2;
    	n2.next = &n3;
    	n3.next = NULL;
    
    	ret = printListFromTailToHead(&n1);
    	for (int i = 0; i < ret.size(); i++) {
    		cout << ret[i] << endl;
    	}
    }
    
  • 相关阅读:
    NWERC 2016 F. Free Weights
    Gym 101142C CodeCoder vs TopForces 【dfs】
    HDU 6186 number number number 【规律+矩阵快速幂】
    UVA 10048 Audiophobia 【floyd】
    Fully Connected Layer:全连接层
    Artificial Neural Networks:人工神经网络
    Back Propagation:误差反向传播算法
    Gradient Descent:梯度下降
    Regularization:正则化
    softmax loss function:归一化指数函数
  • 原文地址:https://www.cnblogs.com/hesper/p/10411993.html
Copyright © 2011-2022 走看看