题解 | #从尾到头打印链表#
从尾到头打印链表
http://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035
JZ6 从尾到头打印链表:思路:
先将链表反转,再将反转后的链表存储在新创建的数组中,最后返回数组的首地址。
实例代码如下:
int* printListFromTailToHead(struct ListNode* listNode, int* returnSize )
{
int count=0;
if(listNode==NULL)
//判断结点是否为空指针
{
return listNode;
}
struct ListNode* newHead=NULL;
struct ListNode* pHead=listNode;
struct ListNode* cur=pHead->next;
while(pHead!=NULL)
{
pHead->next=newHead;
count+=1;
//计算结点的个数,以此为依据来为数组开辟对应大小的空间
newHead=pHead;
pHead=cur;
if(cur!=NULL)
{
cur=cur->next;
}
}
//反转链表
int i=0;
int* arr=(int*)malloc(count*sizeof(int));
//为数组开辟足够的空间
while(i<count)
//将反转后的值存储在数组中
{
arr[i]=newHead->val;
newHead=newHead->next;
i+=1;
}
*returnSize=count;
//改变输出型参数的值
return arr;
//返回数组的首地址
}