输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
输入:head = [1,3,2] 输出:[2,3,1]
方法1:
int* reversePrint(struct ListNode* head, int* returnSize)
{
struct ListNode* cur=head;
int count=0;
while(cur)
{
cur=cur->next;
count++;
}
*returnSize=count;
int* ans=malloc(sizeof(int)*(count+1));
while(head)
{
ans[count-1]=head->val;
count--;
head=head->next;
}
return ans;
}
方法2:栈
int* reversePrint(struct ListNode* head, int* returnSize)
{
int stack[10000];
int top=0;
struct ListNode* pre=head;
while(pre!=NULL)
{
stack[top++]=pre->val;
pre=pre->next;
}
*returnSize=top;
int* ans=(int*)malloc(sizeof(int) * (*returnSize));
for(int i=top-1,j=0;i>=0;--i)
{
ans[j++]=stack[i];
}
return ans;
}
方法3:先反转链表,再输出
int* reversePrint(struct ListNode* head, int* returnSize)
{
//先反转再输出
struct ListNode* pre=NULL;
struct ListNode* cur=head;
int count=0;
while(cur)
{
struct ListNode* temp=cur->next;
cur->next=pre;
pre= cur;
cur=temp;
count++;
}
int* ans=malloc(sizeof(int)*(count));
*returnSize=count;
int j=0;
while(pre)
{
ans[j++]=pre->val;
pre=pre->next;
}
return ans;
}