我想生成列表并按
打印val#include<iostream>
#include<vector>
using namespace std;
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
struct ListNode{
int val;
ListNode *next;
ListNode(int x) :val(x), next(NULL){
}
};
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
}
};
ListNode* geneate_list(vector<int> data){
ListNode *p1, *p2;
if (data.size() <= 0){
p1 = (ListNode*)malloc(sizeof(ListNode));
return p1;
}
/*ListNode *p1, *p2;*/
ListNode head(data[0]);
p2 = &head;
for (int i = 1; i < data.size(); i++){
p1 = (ListNode*)malloc(sizeof(ListNode));
p1->val = data[i];
p1->next = NULL;
p2->next = p1;
p2 = p1;
}
return &head;
}
int main(){
vector<int> data = {1,2,3,4,5,6};
ListNode* head = geneate_list(data);
ListNode * g = head;
while (head!=NULL){
cout << head->val;
head = head->next;
}
return 0;
}
然后我发现,当cout时,头部的地址完全改变了。 前
后
那么,任何人都可以解释这个吗?thx
答案 0 :(得分:1)
generate_list
函数错误有几个原因:
generate_list
,则不会初始化新生成的列表的头部内容。但无论如何,因为列表是空的,无论如何你都不能有头脑。 val
包含什么?因此generate_list
必须为空向量返回NULL。malloc
来分配带有构造函数的对象。因此,ListNode的构造函数永远不会被调用(虽然这个构造函数在这里不是很有用)。你想要这样的东西:
ListNode* geneate_list(vector<int> data) {
ListNode *head = NULL;
ListNode *previous = NULL;
for (int i = 0; i < data.size(); i++) {
ListNode *p = new ListNode(0);
if (i == 0)
head = p;
p->val = data[i];
p->next = NULL;
if (previous)
previous->next = p;
previous = p;
}
return head;
}
免责声明:这或多或少是一个C函数尽可能接近原始函数。在C ++中,你会以不同的方式做到这一点。