0

schcurr、search、および schtemp という 3 つの同じタイプのリンク リスト ノードがありますが、検索のみにリンクがあります。schcurr と schtemp はリンクされていません。検索を使用して schcurr を配置したい場所を見つけ、schtemp を使用してリンクを保持しています。次の条件が当てはまる場合、schcurr が検索を支配します。そこで、search を schcurr に置き換えたいと思います。検索は既にリストにあり、schcurr はまだ何にも接続されていません。

コードの関連部分を次のように配置しましたが、そこで立ち往生しています:(

PS: TC1 は int で、WF1 は float で、NULL ではありません。

if(schcurr.TC1==search.TC1)
    {
       if(schcurr.WF1>search.WF1)
           {                  
               //schcurr dominates search.
               schcurr.next=seach.next;
               schcurr.prev=seach.prev; 
            }
      }

ここで、search.prev の next と search.next の prev を修正する必要があります。search.prev.next=schcurr; を設定できないと思います。そして、seach.next.prev=schcurr; できますか?

どんな助けでも大歓迎です。

ノードの情報定義:

struct schedules{
float WF1;
int TC1;    
schedules *prev;
schedules *next;
            };
struct schedules *sch;
struct schedules *head;
struct schedules *tail;
struct schedules *schtemp;
struct schedules *search;
4

1 に答える 1

1

検索ノードから両方の方法 (前と次の両方) をたどることができるという点で、双方向リンク リストが正しい場合は、あなたが言ったことを正確に行うことができます。

search.prev.next = schcurr;
search.next.prev = schurr;

編集:ただし、これを行う場合は null チェックを行う必要があります。search.prevたとえば、すでにリンクされたリストの先頭にいる場合、 は null を指す可能性があるためです。同様に、リンクされたリストの最後にいるsearch.next場合はnullになるため、そうすると、search.next.prev = something事実上実行null.next = somethingして違反になります。

于 2012-12-15T17:45:18.393 に答える