不能保持链接列表的标题不变

时间:2019-11-23 03:02:27

标签: c++ data-structures singly-linked-list

我是链接列表上的新手。最近,我尝试创建一个将数组及其大小作为输入的程序。然后将数组转换为链接列表和打印元素。但是该程序无法正常工作,我想这是因为头指针发生了变化。那么,我该怎么做才能保持头节点不变?

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
#....
#....

1 个答案:

答案 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 ;
}