在C中给出一个列表:
struct listNode
{
int val;
struct listNode *nextPtr;
};
typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;
如果在将新项目插入到由指向最后一项(
*sPtr
)的指针给定的列表中的过程中,那么是一个新节点,我想修改指针*sPtr
使其指向新节点,并且然后使新节点成为最后一个节点,是否可以像下面这样编写?ListNodePtr newPtr;
newPtr=malloc(sizeof(ListNode));
if(newPtr!=NULL)
{
newPtr->val=whatever;
newPtr->nextPtr=NULL;
*sPtr->nextPtr=newPtr;
*sPtr=*sPtr->nextPtr;
}
最佳答案
您必须先检查最后一项(sPtr)是否为null,然后再取消对其进行引用,因为列表首先为空(假设未使用虚拟根节点)
同样,您可以将最后一个项目设置为*sPtr = newPtr
而不是*sPtr = *sPtr->nextPtr
。下一个指针是newPtr,因此将其分配给newPtr可以使事情更清晰,更不易出错
更新的版本将是:
ListNodePtr newPtr;
if((newPtr = malloc(sizeof(ListNode)))) {
newPtr->val = whatever;
newPtr->nextPtr = NULL;
if (*sPtr)
(*sPtr)->nextPtr = newPtr;
*sPtr = newPtr;
}