从尾到头打印链表
OJ地址:从尾到头打印链表
下面我将运用三种方法来解决此题
方法一:使用 reverse 函数
【思路】循环遍历单链表,将每个节点的值插入到vector中,然后再将vector进行reverse操作
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> res;
if(head == NULL)
return res;
ListNode *p = head;
while(p)
{
res.push_back(p->val);
p = p->next;
}
reverse(res.begin(), res.end());
return res;
}
方法二:使用递归
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> res;
if(head == NULL)
return res;
res = printListFromTailToHead(head->next);
res.push_back(head->val);
return res;
}
方法三:逆置链表
【先将单链表进行逆置,再遍历链表将每个节点的值插入到vector中】
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> res;
if(head == NULL)
return res;
ListNode *n1, *n2, *n3;
n1 = NULL;
n2 = head;
n3 = n2->next;
while(n2)
{
n2->next = n1;
n1 = n2;
n2 = n3;
if(n3)
n3 = n3->next;
}
while(n1)
{
res.push_back(n1->val);
n1 = n1->next;
}
return res;
}