从尾到头打印单链表
方法1:遍历重新打印
typedef char ListType;
typedef struct ListNode
{
ListType data;
struct ListNode* next;
}ListNode;
void Printendtofirst(ListNode * first)
{
ListNode* cur = first;
ListNode* end = NULL;
while (end != first)
{
cur = first;
while (end != cur->next)
{
cur = cur->next;
}
//end==cur->next
printf(“%d”,cur->data);
//将最后一个指针前移
end = cur;
}
}
方法2:递归打印
typedef char ListType;
typedef struct ListNode
{
ListType data;
struct ListNode* next;
}ListNode;
void Printendtofirst(ListNode * first)
{
//递归结束条件
if (first->next != NULL)
//子问题
Printendtofirst(first->next);
printf(“%d”, first->val);
}
方法3:利用栈
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector printListFromTailToHead(ListNode* head) {
vector< int > rever;
stack< int > sta;
ListNode* p=head;
while(p!=NULL)//将值放入栈中
{
sta.push(p->val);
p=p->next;
}
int len=sta.size();
for(int i=0;i