这道题考察的是对链表定义的理解,需要设置一个链表来存储倒序的原始链表。实际上可以用栈来解决。
P.S.
- 编程的时候最好将head和reverseStake链表都列出来,值得注意的是,两者都代表着指针,当两者的所代表的地址相同时,改变其中一个地址中的数值会影响另一个。因此需要一些中间变量来暂时存储数值,比如insert和insert1.
- 数值为空是’NULL’.
程序的耗时内存和源代码如下
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* reversePrint(struct ListNode* head, int* returnSize){
struct ListNode* reverseStake;
int length = 0;
if (head == NULL)
{
length = 0;
}
else if (head->next == NULL)
{
length = 1;
reverseStake = head;
reverseStake->val = head->val;
reverseStake->next = NULL;
}
else
{
int insert;
struct ListNode* insert1;
//第一段
reverseStake = head;
insert1 = head->next;
reverseStake->next = NULL;
reverseStake->val = head->val;
length++;
//第二段
while (insert1 != NULL)
{
insert = insert1->val;
reverseStake = insert1;
insert1 = insert1->next;
reverseStake->next = head;
reverseStake->val = insert;
length++;
head = reverseStake;
}
}
*returnSize = length;
int* reverse;
reverse = (int*)malloc(sizeof(int)*length);
int i;
for (i=0; i<length; i++)
{
reverse[i] = reverseStake->val;
reverseStake = reverseStake->next;
}
return reverse;
}