1
class List {
  ListNode *head;
  ListNode *prev;
};

class ListNode {
  int data;
  ListNode *next;
  friend class List;
  ListNode(int d, ListNode *n) : data(d), next(NULL) {}
  void insertM(int d) {
    ListNode *ptr, *temp, *curr;
    ptr = head;
    while (ptr->data < d) {
      prev = ptr;
      ptr = ptr->next;
    } // end while
    temp = prev->next;
    curr = new ListNode(d, ptr);
    curr->next = prev->next; // or temp->next
    prev->next = curr;
    ;
  }
};

List mylist;

この関数では、リンクリストの途中にノードを追加しようとしています。他の関数は、前後にアイテムをうまく追加します。リストの真ん中に追加すると、currへのprev-> nextリンクは問題なく動作しますが、curr->nextはNULLを指します。

私はこのプログラムを過去1.5時間機能させようとしています。よろしくお願いします。これは宿題です。

4

1 に答える 1

1

使用する一般的な手順は次のとおりです。

  1. next後に挿入したいノードに到達するまでポインターを下にサーフィンします(Aと呼びます)
  2. 挿入したノード (B) のポインターを A のポインターのnextポインターと一致するように変更します。next
  3. A のnextポインターを B を指すように変更する

コードから、ソートされた整数のリストを維持しようとしているように見えます。これは宿題なので、おそらくコード スニペットを取得することはできませんが、コードを一瞥すると、ノード コンストラクターで次のパラメーターを使用するのに、次の値を null に設定する理由を尋ねなければなりません。コードの残りの部分を見ないと、確かなことは言えませんが、 next(NULL)9 行目を be に変更し、一番下の行next(n)を削除します。curr->next

于 2012-05-13T01:54:07.850 に答える