Ich versuche, den Abstand zwischen dem Knoten, der Mindestwert enthält und dem Knoten, der maximalen Wert enthält, zu finden. Ich erwähne das ist eine lineare Doppelkettenliste. Der Code, den ich geschrieben habe, löst mein Problem nicht so, wie es sollte und ich finde keine andere Logik.Finden der Entfernung zwischen zwei Knoten in einer linearen doppelt verketteten Liste (C++)
hier ist der Code:
#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);
}
* Der Code, den ich geschrieben habe, löst mein Problem nicht so, wie er sollte * - Ok, also hast du den Debugger benutzt, um herauszufinden, wo der Code gegen deine Logik/Plan geht? - * und ich finde keine andere Logik * - Das würde einen Programmierer von seinem Job entlassen, wenn sie das sagten. Sie haben den Code geschrieben, finden, wo der Code gegen Ihren Plan verstößt, und Ihren Plan anpassen. – PaulMcKenzie
@PaulMcKenzie Hallo! Danke für deine Antwort! Ja, ich habe den Debugger benutzt, aber es hat mir nicht geholfen. Deshalb bin ich wegen einiger Vorschläge hierher gekommen. – Alin
Die Aufgabe des Debuggers ist es, Ihnen Schritt für Schritt zu zeigen, was Ihr Programm macht, welchen Wert die Variablen haben usw. Es weiß nicht, welches Problem Sie lösen wollen - das müssen Sie bestimmen. Wenn eine Variable einen Wert hat, den Sie nicht erwartet haben, oder wenn das Programm einen anderen Pfad als erwartet einnimmt, dann wissen Sie, dass Sie einen Fehler haben. – PaulMcKenzie