• 局部变量 static new 结构体指针


    struct ListNode {
        int val;
        ListNode* next;
        ListNode(int x) : val(x), next(NULL) {}
    };

    有一个函数利用LisNode生成了一个链表,返回头指针ListNode* head。

    但是由于是局部变量所以返回头指针后局部变量就都丢失了,head->next指向的指针丢失了,导致读不出来head之后的节点。

    发现问题在于用了如下的形式对指针赋值

    ListNode h(0);

    ListNode* head=&h;

    这样函数返回后,h的值丢失,导致head->next丢失。

    解决方法是,全部用ListNode* ptr = new ListNode(0);

    这样用new分配了内存,而new类似于malloc,分配的空间在堆heap上而非栈stack上,不会丢失。

    #include <iostream>
    #pragma once
    #include <iostream>
    using namespace std;
    
    
    struct ListNode {
        int val;
        ListNode* next;
        ListNode(int x) : val(x), next(NULL) {}
    };
    ListNode* SolveB(int n) {
        /* your code starts here */
        //construct a list accrording to input
        int value;
        cin >> value;
        ListNode* head = new ListNode(0);
        head->val = value;
        ListNode* temp = new ListNode(0);
        head->next = temp;
    
    
        for (int i = 1; i < n; i++) {
            if (i <= n - 2) {
                cin >> value;
                temp->val = value;
                
                ListNode* p =new ListNode(0);
                temp->next = p;
                temp = p;
            }
            else {
                cin >> value;
                temp->val = value;
                temp->next = NULL;
            }
        }
    
    ListNode* odd = head;
    ListNode* even = head->next;
    ListNode* evenhead = even;
    
    if(odd!=NULL){
    while((even!=NULL)&&(even->next!=NULL)){
    odd->next = odd->next->next;
    even->next = even->next->next;
    odd = odd->next;
    even = even->next;
    }
    odd->next = evenhead;
    }
    return head;
        
    }
    
    int main() {
        int n;
        cin >> n;
        // get the head node of rearranged list
        ListNode* ls = SolveB(n);
        
        for (int i = 0; i < n; i++) {
            cout << ls->val << " ";
            ls = ls->next;
        }
        system("pause");
        return 0;
    }
  • 相关阅读:
    Mysql中判断一个点是否落在多边形内
    Linux进阶之环境变量文件/etc/profile、/etc/bashrc、/etc/environment
    gitlab打开group_member页面500错误
    jenkins连接k8s集群
    svn备份迁移
    npm管理nodejs版本
    linux远程执行shell脚本或者python脚本无法获取远程主机的环境变量
    ansible-playbook对服务器安装阿里云日志服务agent--ilogtail
    linux安装Arachni进行web网站扫描
    nginx使用免费ssl证书
  • 原文地址:https://www.cnblogs.com/lqerio/p/11703726.html
Copyright © 2020-2023  润新知