描述
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
示例1
输入:
{1,2,3}
返回值:
[3,2,1]
示例2
输入:
{67,0,24,58}
返回值:
[58,24,0,67]
解法1(不太聪明)
int* printListFromTailToHead(struct ListNode* listNode, int* returnSize ) {
if (NULL == listNode || NULL == returnSize) {
return NULL;
}
int cnt = 0;
struct ListNode* p = listNode;
while (NULL != p) {
p = p->next;
cnt++;
}
int* result_arr = (int*)malloc(sizeof(int) * cnt);
*returnSize = cnt;
p = listNode;
while (NULL != p) {
result_arr[--cnt] = p->val;
p = p->next;
}
return result_arr;
}
jie'fa
int* printListFromTailToHead(struct ListNode* listNode, int* returnSize ) {
if (NULL == listNode || NULL == returnSize) {
return NULL;
}
int cnt = 0;
struct ListNode* p = listNode;
while (NULL != p) {
p = p->next;
cnt++;
}
int* result_arr = (int*)malloc(sizeof(int) * cnt);
*returnSize = cnt;
p = listNode;
for (int i = cnt-1; i >= 0; i--) {
result_arr[i] = p->val;
p = p->next;
}
return result_arr;
}