从尾到头打印链表
描述
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
示例1
输入:{1,2,3}
返回值:[3,2,1]
思路
要求返回的是数组,函数传参并未有数组指针,所以要return回数组指针,数组有效长度通过传入的returnSize返回。只是要求逆序返回链表的数值,所以我们可以不用考虑将链表逆序,而是在从链表中取出值放入数组的这个过程中将值进行逆序即可。所以先获知链表长度,我们就知道有效数组长度,操作数组对我们而言,就简单很多啦。
int* printListFromTailToHead(struct ListNode* listNode, int* returnSize ) {
static int listval[10001] = {0};
struct ListNode *listp = NULL;
int listnums = 0,i = 0;
if(listNode == NULL)
return NULL;
listp = listNode;
while(listp->next != NULL)
{
listnums++;
listp = listp->next;
}
listp = listNode;
for(i = listnums;i >= 0;i--)
{
listval[i] = listp->val;
listp = listp->next;
}
*returnSize = listnums+1;
return listval;
}