C++ 局部变量 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;
}

 

posted @ 2019-10-19 14:35  Erio  阅读(982)  评论(0编辑  收藏  举报