Singly linked list linear search Algorithmus -> equivalent?
-
Hallo,
ich schaue mir gerade unsere Programmier-Folien für die Vorlesung an. Folgendes ist gegeben:
NodePtr search(NodePtr head, int target) { NodePtr here = head; if (here == NULL) { return NULL; } else { while (here->data != target && here->link != NULL) { here = here->link; } if (here->data == target) { return here; } else { return NULL; } } }Ich meine, wenn schon C in C++, dann aber so:
NodePtr search(NodePtr head, int target) { for ( ; head; head = head->link) { if (head->data == target) { return head; } } return nullptr; }Die Lösung ist doch mindestens genau so gut, oder? Meine Argumente: Die Kopie eines Pointers nochmal kopieren ist Schwachsinn. Es wird der Sonderfall head=nullptr elegant gehandhabt. Es wird ebenfalls frühst-möglich die Suche beendet.
-
Du solltest den Kurs geben.
-
Ganz so weit würde ich nicht gehen, aber ich leite daraus mal ab, dass die Umformung gut ist.
LG
-
Hallo,
HarteWare schrieb:
ich schaue mir gerade unsere Programmier-Folien für die Vorlesung an. Folgendes ist gegeben:
NodePtr search(NodePtr head, int target) { // ... Puh!Wechsle den Dozenten.
HarteWare schrieb:
Ich meine, wenn schon C in C++, dann aber so:
NodePtr search(NodePtr head, int target) { for ( ; head; head = head->link) { if (head->data == target) { return head; } } return nullptr; }Die Lösung ist doch mindestens genau so gut, oder?
Die Lösung ist deutlich besser.
Du kannst aber noch einen drauf setzen:
NodePtr search( NodePtr head, int target ) { for( ; head && head->data != target; head = head->link ) ; return head; }Gruß
Werner
-
stimmt wäre noch kürzer
Vielen Dank für eure Antworten!
-
Da würde ich aber den Code eher so schreiben:
NodePtr search( NodePtr head, int target ) { while(head && head->data != target) head = head->link; return head; }Ist m.E. lesbarer und verständlicher.