剑指Offer_编程题
从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
//链表节点结构
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
vector<int> printListFromTailToHead(ListNode* head) {
int i=0; //i记录元素个数
ListNode *p;
p = head;
while(p!=NULL){
i++;
p=p->next;
}
vector<int> ArrayList(i);
p = head;
while(i>0){
ArrayList[i-1] = p->val;
i--;
p = p->next;
}
return ArrayList;
}
思路分析:
两次遍历链表,第一次记录链表中元素个数;第二次遍历时根据根据元素个数确定元素的位置,并插入到数组相应位置
链表:1 2 3 4 5 6 7 8 9
第一次遍历得到元素个数:9
第二次遍历插入:在数组第9个位置(下标为len-1)插入1,第8个位置(下标为len-2)插入2,以此类推,得到数组:9 8 7 6 5 4 3 2 1