1

重複の可能性:
2つのポインターのみを使用して単一リンクリストを逆にする方法は?

これは、リンクリストを逆にするためのCコードです。しかし、これは望ましい出力を生成していません。

struct node *temp,*prev;
while(head->next!=NULL)
  {
    temp=prev=head;
    while(temp->next->next!=NULL)
      {
    temp=temp->next;
    prev=prev->next;
      }
    temp=temp->next;
    temp->next=prev;
    prev->next=NULL;
  }

私は何が欠けていますか?

4

2 に答える 2

3

あなたはあなたのキャリアの中でこの質問を頻繁に自問するでしょう、それであなたがこれに対する解決策を考え出すことが重要です。ここにいくつかのポインタがあります:

  1. コードの単体テストを記述します。空のリスト、1つの要素を持つリスト、次に2つ、次に3つのリストから始めます。

  2. デバッガーでコードを実行します。

  3. printf()コードの実行時にコードが何をするかを示すデバッグステートメントを追加します。

于 2012-11-06T15:33:01.667 に答える
1

あなたは詳細を知るのに十分な情報を提供していないので、それは非常に好きなリストだと思いました。もしそうなら、あなたは一度あなたのリストを実行する必要があります。

void reverse(struct node **p) {
    struct node *buff = NULL;
    struct node *head = *p;

    while (head != NULL) {
        struct node *temp = head->next;
        head->next = buff;
        buff = head;
        head = temp;
    }   

    *p = buff;
}
于 2012-11-06T15:36:33.947 に答える