2016-10-19 6 views
-3

私はC++を初めて使用しているので、私のコードは最適ではありませんが、現時点では動作させたいだけです。 linked listという2つの要素(1.と2.、2.と3.など)を比較するfunctionと、次の要素よりも小さい場合は、これら2つの要素の最初の要素を削除する必要があります。最後に、リストの編集者を表示する必要があります。私は何をしようとしているのかいくつかの例を見つけましたが、彼らは私を混乱させてしまい、私のケースに合わせて調整する方法がわかりません。 は、ここに私のコードです:リンクされたリスト内のポインタ

#include <iostream> 
#include <cstdlib> 
using namespace std; 

struct elements { 
    int value; 
    elements * next; 
}; 

void f (elements * & start){ 
    if (start == NULL || start -> next == NULL) { 
     return; 
    } 
    elements * p = start, * prevvalue = NULL, * previous = NULL, * del, * before = NULL, * after = NULL; 
    int first = start -> value; 
    int second = 0; 
    for (; p != NULL; p = p -> next){ 
     cout << p -> value << endl; 
     second = p -> value; 
     if (first < (p -> value)) { 
      before = prevvalue; 
      del = p; 
      previous = p; 
      p -> next = after -> next; 
      after -> next = p; 
      delete del; 
     } 
     first = second; 
     previous = prevvalue; 
    } 
    if (previous == NULL) start = start -> next; 
    else prevvalue -> next = start -> next; 
} 

int main(){ 
    elements * start = NULL, * last = NULL, * input; 
    int count; 
    cout << "How many elmenets would you like to input? "; 
    cin >> count; 
    for (int i = 0; i < count; i++){ 
     cout << "Please input " << i + 1 << ". element: "; 
     elements * input = new elements; 
     cin >> input -> value; 
     input -> next = NULL; 
     if (last != NULL) { 
      last -> next = input; 
      last = input; 
     } 
     else start = last = input; 
    } 
    f (start); 
    elements * p = start; 
    while (p != NULL) { 
     cout << p -> value << endl; 
     p = p -> next; 
    } 
    input = start; 
    while (start != NULL){ 
     elements * temp = start; 
     start = start -> next; 
     delete temp; 
    } 
    return 0; 
} 

ありポインタと完全に間違って何かがありますので、それは働いていません。 誰かが自分のコードを編集して不要なものをすべて捨ててもらえますか? ありがとうございます!

+1

のようないくつかのクリーンアップ何か? – UKMonkey

+0

これは宿題ですか?もしそうでなければ、あなたはC++をしようとはしていませんが、C. – AntoineB

+0

ですから、入力が1,2,3,4,5 - > resultが5なら、5,2,3,4,1 - > 541? – kalvis

答えて

0

した後、私はあなたがフォーマットを見て、素敵なインデントを得る少し時間を過ごすお勧めできます。この

#include <iostream> 
#include <cstdlib> 
using namespace std; 

struct elements { 
    int value; 
    elements* next; 
}; 

elements* funkcija(elements *start) { 
    if (start == NULL || start->next == NULL) { 
     return start; 
    } 

    elements *list = start; 
    elements *current = start; 

    elements *previous = nullptr; 

    while(current) { 
     elements* next = current->next; 
     if (!next) { 
      break; 
     } 

     if (current->value < next->value) { 
      if (previous) { 
       delete current; 
       previous->next = next; 
      } 
      else { 
       list = next; 
       delete current; 
      } 
      current = nullptr; 

     } 
     else { 
      previous = current; 
     } 

     current = next; 
    } 

    return list; 
} 

int main() { 
    elements *start = NULL, *last = NULL; 
    int count; 
    cout << "How many elmenets would you like to input? "; 
    cin >> count; 
    for (int i = 0; i < count; i++) { 
     cout << "Please input " << i + 1 << ". element: "; 
     elements* input = new elements; 
     cin >> input->value; 
     input->next = NULL; 
     if (last != NULL) { 
      last->next = input; 
      last = input; 
     } 
     else { 
      start = last = input; 
     } 
    } 
    start = funkcija(start); 
    elements * p = start; 

    while (p != NULL) { 
     cout << p->value << endl; 
     p = p->next; 
    } 

    while (start != NULL) { 
     elements * temp = start; 
     start = start->next; 
     delete temp; 
    } 

    return 0; 
} 
+0

うわー、ありがとうございました! :) – Sta

関連する問題