2016-12-13 4 views
1

私はhttp://www.cprogramming.com/snippets/source-code/singly-linked-list-insert-remove-add-countを経由して、このコードを発見したC.にリンクリストと位置によって挿入理解しようとしています:理解挿入

void addafter(int num, int loc) 
{ 
    int i; 
    struct node *temp,*left,*right; 
    right=head; 
    for(i=1;i<loc;i++) 
    { 
    left=right; 
    right=right->next; 
    } 
    temp=(struct node *)malloc(sizeof(struct node)); 
    temp->data=num; 
    left->next=temp; 
    left=temp; 
    left->next=right; 
    return; 
} 

それはコンパイルし、正常に動作しますが、しかし、私は理解していませんこの部分:

left->next=temp; 
left=temp; 
left->next=right; 

左の次のノードポインタがtempを指している場合、left = tempで上書きされませんか?

left->next=temp; 
temp->next=right 

これを私に説明してもらえますか?ありがとうございました。

+0

の上にあなたのコードの一部を変更したい場合があります。 –

+0

なぜleft = tempを使うのですか? – user3283146

+1

それはあなたが作者に尋ねる必要があるので、他の誰も答えることはできない。私自身は何の理由も見ません。 –

答えて

0

あなたの提案は元のコードで掲載されているものと同じです。 リスト要素はまた、「左」ポインタの下で利用できるようになり、「TEMP」ポインタの下に

left=temp; 

が、要素を書き込むことによって上書きされないように、それは、(一時として、左、右のポインタである)のポインタに割り当てられた値です。

個人的には、あなたのコードが理解しやすく/読みやすいことに私は同意します。それは、実際のアクションに合ったコードを書くことであり、追加の変数や割り当てを難読化することではありません。

どのようにリンクされたリストが動作するかを理解した後で、このような機能が期待でき、どの実装も読みやすく理解することができます。

0

あなたのソリューションは同等です。
さらに良い方法は、正しいポインタを削除することです。

temp->next = left->next 
left->next = temp 

注:はい、あなたの代わりに、オリジナルのコードと同様に有効である

関連する問題