【编程-剑指offer】打印链表

2、打印链表

题目描述

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

知识点

:

链表

解题思路

将链表读出来放在ArrayList,这里使用的是vector 容器对象。要使按链表值从尾到头的顺序返回,根据vector的特性,可使用一个vector,也可使用两个。
1、使用两个vector: 1)将链表中值顺序读到一个vector中,2)再逆序写到另一个vector中。
2、使用一个vector:将链表中的值顺序读出,并将其逆序写到vector中。

代码块

1、使用两个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> list;
        vector<int> newlist;
        ListNode* current = head;
        //1)顺序写入
        while(current != NULL){
            list.push_back(current->val);
            //list.insert(list.begin(),current->val);
            current = current->next;
        }
        //2)逆序插入
        for(int i = list.size()-1; i>=0; i--){
            newlist.push_back(list[i]);
        }
        //list.pop_back();
        return newlist;
    }
};
... prompt'''

2、使用一个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> list;
        ListNode* current = head;
        //list.push_back(0);
        while(current != NULL){
            //list.push_back(current->val);
            list.insert(list.begin(),current->val);
            current = current->next;
        }
        //list.pop_back();
        return list;
    }
};

如果是用的不是vector 容器对象,可能没有办法直接完成逆向插入的过程。第一种方法的适用性更好,对各种数据类型都通用。但在了解使用的数据类型的前提下,可以使用更简便的方法。

猜你喜欢

转载自blog.csdn.net/qq_20135597/article/details/82142574
今日推荐