[英]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.