将链表附加到另一个列表的末尾

时间:2015-10-31 16:23:35

标签: c list merge

我试图在另一个列表的末尾插入一个列表 使用此代码:

typedef struct Element
{
    int vKey;
    char vInfo[30];
    struct Element *pNext;

} tsElement;

typedef struct
{
    tsElemento *pFirst;
    int vLength;

} tsLDSE;

void Unir(tsLDSE *pListIn, tsLDSE *pListOut) 
{
    tsElement *pElementOut;

    pElementOut = pListOut->pFirst;

    while (pElementOut != NULL)
    {
        pElementOut = pElemenoOut->pNext;
    }

    pElementOut = pListIn->pFirst;
    pListOut->vLength = pListOut->vLength + pListIn->vLength ;
}

我检查了打印地址,pElementoOut实际上是第一个列表的结尾并且是poiting为NULL,然后它接收第二个列表的fisrt地址,但是当我打印出来时它只打印第一个列表,我可以& #39;弄清楚原因。

1 个答案:

答案 0 :(得分:1)

您的函数Unir仅将输入列表的长度添加到输出列表的长度。

这个循环:

while (pElementOut != NULL)
{
    pElementOut = pElemenoOut->pNext;
}

仅将pElementOut设为NULL。

此外,当您撰写pElementOut = pListIn->pFirst;时,您所做的就是局部变量pElementOut

你要做的是:

while (pElementOut->pNext != NULL)
{
    pElementOut = pElementOut->pNext;
}

pElementOut->pNext = pListIn->pFirst;

这将pListIn的第一个元素放在pListOut的最后一个元素的末尾。

另外,在函数开头添加NULL检查!如果你不小心,你可以很容易地在那里获得一个NULL指针取消引用。