最小値を含むノードと最大値を含むノードとの距離を求めようとしています。私はそれが線形二重連鎖リストであることを言及します。私が書いたコードは私の問題を解決するものではなく、私は他のロジックも見つけられません。リニアダブルチェーンリスト(C++)で2つのノード間の距離を求める
はここのコードです:
#include<iostream>
#include<stdio.h>
struct Nod {
int info;
Nod* next;
Nod* prev;
};
Nod* createNode(int nr) {
Nod* nod = new Nod;
nod->info = nr;
nod->next = NULL;
nod->prev = NULL;
return nod;
}
bool checkDuplicates(Nod* lst, int nr) {
Nod* tmp = lst;
while (tmp != NULL) {
if (tmp->info == nr) {
return true;
}
tmp = tmp->next;
}
return false;
}
void insertNode(Nod*& lst, Nod* nou) { //at the beginning
if (lst == NULL) {
lst = nou;
}
else {
if (checkDuplicates(lst, nou->info) == false) {
nou->next = lst;
lst->prev = nou;
lst = nou;
}
else {
printf("Valoarea (%d) exista deja! \n", nou->info);
}
}
}
void printList(Nod* lst) {
Nod* tmp = lst;
if (tmp) {
while (tmp != NULL) {
printf("%d \n", tmp->info);
tmp = tmp->next;
}
}
}
void distance(Nod* lst) {
if (lst) {
/*Finding min and max*/
Nod* tmp = lst;
int min = tmp->info;
int max = tmp->info;
int poz_min = 1;
int poz_max = 1;
while (tmp != NULL) {
if (tmp->info < min) {
min = tmp->info;
poz_min++;
}
if (tmp->info > max) {
max = tmp->info;
poz_max++;
}
else {
tmp = tmp->next;
}
}
int dist = poz_max-poz_min;
if (dist<0) {
dist = dist*(-1);
}
printf("\n Min: %d [poz: %d] , Max: %d [poz: %d], Distance: %d. \n ", min, poz_min, max, poz_max, dist);
}
else {
printf("Null list.\n");
}
}
void main() {
Nod* lst = nullptr;
Nod* nou = createNode(5);
insertNode(lst, nou);
nou = createNode(2);
insertNode(lst, nou);
nou = createNode(1);
insertNode(lst, nou);
nou = createNode(7);
insertNode(lst, nou);
printList(lst);
distance(lst);
}
*私が書いたコードでは問題が解決しない* - OK、デバッガを使用して、コードがロジック/プランと違反している場所を見つけましたか? - *他のロジックは見つからない* - プログラマがそのことを言ったら、彼らは仕事から解雇されるだろう。あなたはコードを書いて、コードがあなたのプランと違うところを見つけ、プランを調整します。 – PaulMcKenzie
@PaulMcKenzieこんにちは!返信ありがとうございます!はい、私はデバッガを使用しましたが、それは私を助けませんでした。だからこそ私はここにいくつかの提案をした。 – Alin
デバッガの仕事は、あなたのプログラムがやっていること、変数の価値などを段階的にあなたに示すことです。あなたが解決しようとしている問題、つまりそれを決定することはわかりません。変数に期待していなかった値がある場合、またはプログラムが期待したものと異なるパスをとる場合は、バグがあることがわかります。 – PaulMcKenzie