0

リンクされたリストに並べ替えられた挿入のための 1 つの反復関数を実装するのにいくつかの困難があります。私は以前、関数が呼び出されたときにはるかに簡単な再帰でそれを行いましたinsert()が、ここでは条件を実装する方法に少し混乱してい(l->data < data)ます:

typedef struct E_Type * List;

struct E_Type
{
  int data;
  struct E_Type* next;
};

そして機能:

insert(List & l, int data){
  if (l == 0 || l->data > data){
    List new_list = new E_Type;
    new_list->data = data;
    new_list->next = l;
    l = new_list;
  }
  else if (l->data < data){
    List new_list = new E_Type; 
    new_list->data = data;
    new_list->next = l; //i am shooting in the dark with this one
    l = new_list;
  }
}
4

1 に答える 1

2

これをコーディングすることはしませんが、いくつかのヒントを提供します。

基本的に、次の 2 つのケースがあります。

  1. 挿入される要素が新しいヘッドになります。この場合、更新する必要がありますl
  2. 挿入される要素は新しいヘッドになりません。この場合、ループが必要です。

私があなただったら、最初にペンと紙を使って両方のケースに取り組みます。

于 2012-12-10T23:18:49.420 に答える