反转链表1

/**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    ListNode* ReverseList(ListNode* head) {
        // write code here
        if (head==NULL) {
        return nullptr;
        }
        ListNode* start=(ListNode*)malloc(sizeof(ListNode));
        ListNode* end;

        end = head;
        int length = 0;
        start->next = nullptr;
        while (end != NULL) {
            // 正确分配新节点的内存,并设置其值和next指针
            ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
            if (temp != NULL) { // 总是检查malloc是否成功
                temp->val = end->val;
                temp->next = start; // 在开始处插入
                start = temp; // 现在start指向新节点,使其成为列表的新头部
            } else {
                // 处理内存分配失败
            }
            // ListNode *temp;
            // temp->val=end->val;
            // temp->next=start;

            //start->val=end->next->val;
            //start->next=temp;

            end = end->next;

        }

        return start;
    }

您的函数目的是反转链表,但在实现中有一些需要注意和改进的地方:

您在循环中为每个节点重新分配内存,这实际上是在创建原始链表的深拷贝的反转版本,而不是就地反转链表。如果只需要反转链表而不创建其副本,则无需分配新的节点内存。

start指针被初始化为一个新分配的节点,这会导致在返回的链表开头有一个额外的未使用的节点。

没有释放原始链表的内存,如果意图是创建新的链表副本,则应该有相应的机制来管理旧链表的内存,以避免内存泄漏。

下面是一个更正和优化后的代码,直接就地反转链表,不创建新节点:

ListNode* ReverseList(ListNode* head) {
    if (head == NULL || head->next == NULL) {
        return head;
    }

    ListNode* prev = NULL;
    ListNode* curr = head;
    ListNode* next = NULL;

    while (curr != NULL) {
        next = curr->next; // 保存下一个节点
        curr->next = prev; // 反转当前节点的指针
        prev = curr; // 移动prev到当前节点
        curr = next; // 移动curr到下一个节点
    }

    return prev; // prev成为新的头节点
}

这段代码通过遍历原始链表,将每个节点的next指针指向它的前一个节点,从而实现了链表的就地反转。在遍历结束时,prev将指向原始链表的最后一个节点,它成为反转后的链表的头节点。

相关推荐

  1. 1

    2024-04-04 03:32:03       20 阅读
  2. 2024-04-04 03:32:03       31 阅读
  3. leetcode-

    2024-04-04 03:32:03       38 阅读
  4. 206.

    2024-04-04 03:32:03       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 03:32:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 03:32:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 03:32:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 03:32:03       20 阅读

热门阅读

  1. C 从函数返回指针

    2024-04-04 03:32:03       14 阅读
  2. 最大子序列和问题的求解

    2024-04-04 03:32:03       13 阅读
  3. 深度学习| Pytorch实现DiseLoss代码

    2024-04-04 03:32:03       17 阅读
  4. ubuntu安装和缷载squid

    2024-04-04 03:32:03       14 阅读
  5. llama-factory简介

    2024-04-04 03:32:03       17 阅读
  6. Docker安装Kafka

    2024-04-04 03:32:03       15 阅读
  7. 给计算机入坑的寄语吧

    2024-04-04 03:32:03       18 阅读
  8. 图像分类模型AlexNet原理与实现

    2024-04-04 03:32:03       13 阅读
  9. 面试算法-127-优势洗牌

    2024-04-04 03:32:03       12 阅读
  10. AudioLDM2全文翻译

    2024-04-04 03:32:03       18 阅读