1

C のリンク リスト内のノードを使用して何かを理解するのに苦労しています。紙に 6 つのノードのリストが与えられ、いくつかの異なるコマンド セットの後でノードがどのように変化するかを描こうとしています。リストは次のように始まります (ノードに名前が付けられている場合、その名前はその直前にリストされます)。

head[2, link]-->[4, link]-->P[6, link]-->[7,link]-->Q[8, link]-->R[9, link is null ]

コマンドの最初のセット:

R->link = Q;
head->item = 11;
P = P->link;

head[11, リンク]-->[4, リンク]-->[6, リンク]-->P[7,リンク]-->Q[8, リンク]-->R[9, リンク]- ->Q

これが私の最初の質問です: R->link を Q に割り当てた場合、それは自分自身の周りを Q ノードに向けるだけですか?

コマンドの 2 番目のセット:

P->item = head->item;
Q = NULL;
P = (P->link)->link;
head = R;

[11, リンク]-->[4, リンク]-->[6, リンク]-->[11,リンク]-->Q[NULL?]-->PR ヘッド[9, リンク]--> Qヌル?

2 番目の質問: Q ノードで null の値を正確に取るものは何ですか?? そのリンクは消えますか?P = (P->link)->link が null に設定された後、そのリンクに沿って移動するにはどうすればよいですか? Q が null になったので、R も何を指しているのでしょうか?

ノードを作成するための私のコードは次のとおりです。

#include <stdio.h>
#include <stdlib.h>

typedef int item_t;
typedef struct node node_t;
typedef node_t* pointer_t;


struct node{
       item_t item;
       pointer_t link;
       };

int main(void){

    pointer_t head, P, Q, R;

    head = malloc(sizeof(node_t));
    head->item = 2;
4

1 に答える 1

2

回答 1: はい、その操作はリストにサイクルを作成し、後で頭痛の種になります。実際、コマンドの最初のセットの後、リストは次のようになります。

head[11,link]-->[4,link]-->[6,link]-->P[7,link]-->Q[8,link]-->R[9,link]--+
                                                    ^-----------<--------+ 

回答 2: 設定Q = NULLによってリストが変更されることはありません。リスト内のリンクではなく、無関係なポインタを変更しているだけです。リストは次のとおりです。

[11,link]-->[4,link]-->[6,link]-->[11,link]-->[8,link]-->P,R,head[9,link]--+
                                               ^----------------<----------+ 

リンクされたリスト内の要素を指すすべてのポインターであることを忘れないでください。P, Q, R, headそれらを変更すると、それらが指すものだけが変更され、リンクされたリストの構造は変更されません。

于 2013-05-08T00:46:16.897 に答える