从尾到头打印链表

Posted yl1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从尾到头打印链表相关的知识,希望对你有一定的参考价值。

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

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

方法一利用栈的先进后出
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
    vector<int> result;
    stack<int> arr;
    ListNode* p = head;
    while(p!=NULL)
    {
      arr.push(p->val);
      p = p->next;
    }
    int len = arr.size();
    for(int i=0;i<len;i++)
    {
      result.push_back(arr.top()); //push_back 在vector函数尾部加入一个数据
      arr.pop(); //pop()提取栈顶元素 相当于删除栈顶元素
    }
    return result;
    }
};

方法二 数组翻转

class Solution {

  public:

    vector<int>  printListFromTailToHead(ListNode* head) {

    vector<int> value;

    ListNode* p=NULL;

    p =head;

    while(p != NULL){

      value.push_back(p->val);

       p=p->next;

    }

    int temp = 0;

    int i=0,j=value.size()-1;

    while(i<j){

      temp = value[i];

      value[i] = value[j];

      i++;

      j--;

    }

    return value;

  }

}

方法三递归
class Solution {
public:
    vector<int> value;
    vector<int> printListFromTailToHead(ListNode* head) {
    ListNode *p=NULL;
    p = head;
    if(p!=NULL){
      if(p->next !=NULL){
        printListFromTailToHead(p->next);
      }
      value.push_back(p->val);
    }
    return value;    
};
记录: 还是要记住size();push_back()在给数组类尾部加入一个数据;利用递归的从后返回真的是太聪明了

以上是关于从尾到头打印链表的主要内容,如果未能解决你的问题,请参考以下文章

从尾到头打印链表-剑指Offer

从尾到头打印链表

《剑指Offer—— 06. 从尾到头打印链表》代码

从尾到头打印链表

从尾到头打印链表

[编程题] 从尾到头打印链表