1

誰かが私が間違っていることを理解するのを手伝ってくれますか?リンクリストに文字を挿入する必要があります。

それはそれを逆にするよりも、人の名前のような入力を取ります。次に、キャラクターを追加する位置を選択するようにユーザーに指示します。

void insert_char(Node* plist, char x, int p){
  Node* d=plist;
  for (int i=1; i<p and 0!=d; i++)
    d=d->next;
  if (0 !=d)
    d->x=x;

ただし、このコードは文字を変更しますが、追加しません。

アップデート:

私はまだそれを理解することはできません。

void insert_char(Node* plist, char x, int p){
    Node* d=plist;
    Node* d2=0;
    for (int i=1; i<p and 0!=d; i++)
        d2->next=d->next;
    d->next=d2;
    if (0 !=d)
        d2->x=x;
    return;
}

セグメンテーションエラーが発生します。

さて、私は本当に欲しかったものを理解しました。手伝ってくれてありがとう

  void insert_char(Node* plist, char x, int p){
  Node* d=plist;
  Node* d2= new Node();
  for (int i=1; i<p and d; i++)
    d2->next=d->next;
    d->next=d2;
  if (0 !=d)
    d2->x=x;
  return;
}
4

2 に答える 2

2
d->x=x;

以前にあった文字を上書きしています。何が起こると思いますか?

0!=d

と単純化することができd、と比較する必要はありません0

中かっこを使用すると役立つ場合もあります。このように一行で無視できるのはいいことだと思いますが、いつかまた戻ってきて噛み付くでしょう。

アップデートに関しては、次の行があるため、常にセグメンテーション違反が発生します。

Node* d2=0;
d2->next=d->next;
d2->x=x;

あなたはを作成していて、Node*それに何も割り当てたり、メモリを割り当てたりすることはありません。初期化されていないポインタを逆参照しています。

これをやろうとしていないのですか?

void insert_char(Node* plist, char x, int p){
  Node* d=plist;
  for (int i=1; i<p && d; i++)
    d=d->next;
  if (!d) // If this node is empty..
  {
    d = new Node; // Store a new node at the position.
    d->x = x; // Set the char value for the new node.
  }
  else // If this node is not empty..
  {        
    Node* next = d->next(); // Get the next node.
    d = new Node; // Create a new node and insert.
    d->x = x; // Set the char for this node.
    if(next) // If there was a mode above our insertion..
    {          
      newNode->next = next; // Store it in the next member of our new node.
    }
  } 
于 2012-09-17T04:13:24.873 に答える
1

現在、最終的なifステートメントの本文は、現在のノードのx値を単純に上書きしています。新しいノードをリンクリストに貼り付けるには、次のことを行う必要があります。1.新しいノードを作成します2.リストで新しいノードの場所を選択します(すでに行っています)3。前のノードをノードに向けます4.ノードを次のノードに向けます

それをすべて達成するための微妙な違いがいくつかありますが、うまくいけば、それで始めるのに十分です。

于 2012-09-17T04:12:54.377 に答える