C:更改列表的下一个指针

时间:2017-11-19 19:02:23

标签: c list pointers

给出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;
} 

1 个答案:

答案 0 :(得分:0)

在解除引用之前,您必须检查最后一项(sPtr)是否为空,因为列表最初是空的(假设未使用虚拟根节点)

您也可以设置最后一项*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;
}