我不想在代码中使用双指针,请假定第一个节点的索引为1。我有一个链表10-> 20-> 30-> 40-> 50-> 60-> 70-> 80-> 90-> 100-> NULL在另一个指针为pLink的链表中,我想复制奇数索引节点并将输出显示为10-> 30-> 50-> 70-> 90-> NULL 。
SLLI*OddNodes(SLLI*pHead)
{
int counter =1;
SLLI*pTemp=pHead;
SLLI*pList=NULL;
while(pTemp != NULL)
{
if(counter % 2 != 0)
{
if(pList==NULL)
{
pList=malloc(sizeof(SLLI));
pList->data=pTemp->data;
pList->next=NULL;
}
else
{
SLLI*pIter=pList;
SLLI*pNew=malloc(sizeof(SLLI));
pNew->data=pTemp->data;
pNew->next=NULL;
pIter->next=pNew;
pIter=pIter->next;
}
}
pTemp=pTemp->next;
counter ++;
}
return pList;
}
运行此代码时,我得到的输出为10-> 90-> NULL,我知道“ else”部分有问题。 SLLI * pIter = pList没有任何意义,但是我应该怎么做才能消除此错误?
我想问题是pList
语句中的else
根本没有更改。
不会成功的方法:
SLLI*OddNodes(SLLI*pHead)
{
int counter =1;
SLLI*pTemp=pHead;
SLLI*pList=NULL;
SLLI*pNewHead=NULL;
while(pTemp != NULL)
{
if(pList==NULL)
{
pList=malloc(sizeof(SLLI));
pList->data=pTemp->data;
pList->next=NULL;
pNewHead = pList;
}
else
{
pList->next = malloc(sizeof(SLLI));
pList->next->data = pTemp->data;
pList->next->next = NULL;
pList = pList->next;
}
pTemp = pTemp->next;
counter++
}
return pNewHead;
}
此外,我会检查malloc
是否成功