簡體   English   中英

C:更改列表的下一個指針

[英]C: Changing next pointer of a list

在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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM