您的位置:首页 > 职场人生

剑指offer面试题之从头到尾打印链表

2016-03-20 16:10 344 查看
1.问题:

输入一个链表,从尾到头打印链表每个节点的值。

2,思考:

(1),笨方法:

从头到尾扫描一遍,改变next指针,变成逆向。

再扫描一遍改变后的链表,把值放入一个vector中,返回。

(2),既然是从尾到头输出,即逆序输出,即从底到上输出,而递归恰好有自底至上的性质,适应这里。

3,在牛客网上的编码为:

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
vector<int> vec;
vector<int> printListFromTailToHead(struct ListNode* head) {
//我这笨方法还把head后边的内容变了
//真笨!!!
/*if (head == NULL)
{
vector<int> vec;
return vec;
}
ListNode* pPre = NULL;
ListNode* p = head;
ListNode* pNext = p->next;
int count = 0;
while (p)
{
count++;
p->next = pPre;
pPre = p;
p = pNext;
if (p)
{
pNext = p->next;
}
}
ListNode* newHead = pPre;
vector<int> temp(count);
for (unsigned int i = 0; i < count; i++)
{
temp[i] = newHead->val;
newHead = newHead->next;
}
return temp;*/
//参考牛人代码,利用递归的思想,
//这里相当于逆序输出,而递归也是从底到上的次序返回
//正好合适这里用!
if (head != NULL)
{
if (head->next != NULL)
{
printListFromTailToHead(head->next);
}
vec.push_back(head->val);
}
return vec;
//代码简洁而且空间用的少,思想也好!
}
};
反省:

拿到一个题,先从宏观上把握它的思想,再从细节上考虑!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: