剑指offer系列(06)从尾到头打印链表
问题描述
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
本题考察链表的基本操作,链表反转操作。
思路:
- 将链表反转
- 将链表从头到尾输出
链表反转:使用双指针分别指向前一个和当前节点,使用 tmp
保存 当前节点的 next
域,进行交换。具体实现如下
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
vector<int> res;
if (head == nullptr){
return res;
}
ListNode* newHead = reverse(head);
ListNode* cur = newHead;
while (cur){
res.push_back(newHead->val);
cur = cur->next;
}
return res;
}
private:
ListNode* reverse(ListNode* head) {
ListNode* cur = head;
ListNode* pre = nullptr;
while (cur){
ListNode* tmp = cur->next;
cur->next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
};