2017-11-19 15 views
0

の次のポインタを変更する:C: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; 
} 
+0

'* sPtr-> nextPtr' ==>'(* SPTR) - > nextPtr'、それ以外の場合はメンバーを間接参照します。 – mch

+1

[typedefポインターはいいですか?](https://stackoverflow.com/questions/750178/) - 短い答えは「いいえ」です。 –

+0

試してみましたが失敗しましたか? –

答えて

0

最後の項目(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; 
} 
関連する問題