我试图在另一个列表的末尾插入一个列表 使用此代码:
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;弄清楚原因。
答案 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指针取消引用。