题目要求是要去对链表进行翻转输出,拿到题目之后觉得这就是一个出栈的过程,但是由于力扣上面给出的是链表 ,因此不能直接套用栈的函数,这里就要求我们反转链表了。
我的思路是这样的,首先遍历一遍链表,获取数组长度,然后再遍历一次,倒序将数据存储进入数组之中,其实思路很简单,但是我一开始的时候在获取链表长度的时候直接拿head指针作为变化指针的,这样就会导致后面再去做取用每个节点中的值的时候出现错误,因此必须拿一个current指针作为记录长度的指针。这是我第一次了解双指针相关的思路,其实在处理链表相关的题目时,为了保证每个节点的指针不会变化,需要另外的指针来操作,算是一个经验吧,希望对大家有用。
最后是代码。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* reverseBookList(struct ListNode* head, int* returnSize) {
int j = 0;
struct ListNode* cur = head;
while (cur != NULL) {
cur = cur->next;
j++;
}
*returnSize = j;
int* array = (int*)malloc(sizeof(int) * j);
for (int i = j - 1; i >= 0; i--) {
array[i] = head->val;
head = head->next;
}
return array;
}