• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++局部变量staticnew结构体指针

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
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;
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap