我是链接列表上的新手。最近,我尝试创建一个将数组及其大小作为输入的程序。然后将数组转换为链接列表和打印元素。但是该程序无法正常工作,我想这是因为头指针发生了变化。那么,我该怎么做才能保持头节点不变?
temp <- as.data.frame(do.call(rbind, myData))
temp$date <- rownames(temp)
rownames(temp) <- NULL
temp
# AAPL AMD ADI ABBV A APD AA CF date
#1 5.8667e-10 1.0000e+00 1.1791e-09 2.6555e-09 1.1575e-09 1.4103e-09 7.8475e-10 7.3507e-10 2013 Jul
#2 6.4835e-09 8.7537e-01 1.4011e-08 1.2463e-01 6.3841e-09 1.6460e-07 4.3730e-09 3.9838e-09 2013 Aug
#3 5.1793e-08 6.1205e-01 2.6390e-08 3.0943e-07 6.2932e-08 3.8795e-01 1.4287e-08 1.8413e-08 2013 Sep
#4 3.8995e-08 1.0000e+00 2.7634e-08 4.7240e-08 1.4716e-07 1.8933e-07 2.1335e-08 4.9793e-08 2013 Oct
#5 1.3488e-08 8.5249e-09 5.5566e-09 3.3994e-09 4.0132e-08 1.0000e+00 4.1081e-09 9.3415e-09 2013 Nov
#6 1.0000e+00 2.0580e-09 4.2394e-09 1.1179e-08 2.3155e-08 1.4136e-08 8.1755e-09 1.5616e-08 2013 Dec
#7 8.8897e-01 6.8731e-09 1.3535e-08 3.6824e-08 6.8808e-08 2.1634e-08 1.1418e-07 1.1103e-01 2014 Jan
#....
#....
答案 0 :(得分:0)
对于create_linkedlist()
函数中的第二个元素(循环的第一次迭代),tmhead
为NULL,而您正试图取消引用它,这将导致崩溃。
将行node* tmhead = head->link ;
更改为node* tmhead = head;
,它应该可以正常工作。
还尝试使用特定的标头代替bits/stdc++.h
,并使用nullptr
代替NULL
。您也不需要while
循环内的for
循环。摆脱它,只需更改如下所示的for循环-
for(int i = 1 ; i < siz ; i++)
{
temp2 = new node() ;
temp2->data = ara[i] ;
temp2->link = NULL ;
tmhead->link = temp2 ;
tmhead = tmhead->link ;
}
请注意,如果用户提供的大小为0,则您的代码操作错误。最好包括头节点的创建以及循环中的填充。
在进行了所有上述更改后,该功能可能看起来像这样-
node* create_linkedlist (int ara[] , int siz )
{
node* head = nullptr;
node* temp = nullptr;
node* last = nullptr; // Keeps track of last inserted node
for(int i = 0; i < siz; i++)
{
temp = new node();
temp->data = ara[i];
temp->link = nullptr;
if (!head) {
head = temp;
}
if (last) {
last->link = temp;
}
last = temp;
}
return head ;
}