刷题笔记2.16—力扣LCR 123. 图书整理 I(链表反转),关于设置另外指针的重要性

题目要求是要去对链表进行翻转输出,拿到题目之后觉得这就是一个出栈的过程,但是由于力扣上面给出的是链表 ,因此不能直接套用栈的函数,这里就要求我们反转链表了。

我的思路是这样的,首先遍历一遍链表,获取数组长度,然后再遍历一次,倒序将数据存储进入数组之中,其实思路很简单,但是我一开始的时候在获取链表长度的时候直接拿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;
}

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值