<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Rekursiv mehrere Elemente aus einfach verketteter Liste löschen]]></title><description><![CDATA[<p>Hallo,</p>
<p>verzweifle gerade an einer Methode, die ein oder mehrere Elemente aus einer einfach verketteten Liste löschen soll. Meine Idee war es das ganze mit Rekursion zu lösen, also dass sich die Methode solange selbst aufruft bis sie das zu löschende Element nicht mehr findet.</p>
<p>Im zweiten Rekursionsschritt stürzt mir das Teil jedoch immer ohne wirkliche Fehlermeldung ab, der Debugger sagt nur irgendwas von &quot;suspended&quot; und dann ist es &quot;terminated&quot;.</p>
<p>Löschen möchte ich zum Beispiel alle Personen, die 20 Jahre alt sind.</p>
<p>&quot;Person&quot; habe ich durch folgende Struktur modelliert:</p>
<pre><code class="language-cpp">struct Person {
		string name;
		unsigned int age;
		Person *next;
	};
</code></pre>
<p>So sieht meine Methode aus:</p>
<pre><code class="language-cpp">ListeSimple::ERROR_CODE ListeSimple::Remove(int age) {
	Person *current = head;
	if (head == NULL) {
		return EMPTY_LIST;
	} else {
		// delete first element if it has the right value
		if (head-&gt;age == age) {
			Person *del = head;
			head = head-&gt;next;
			delete del;
			return Remove(age);
		} 
		// go through the list, delete elements with the right value and call the function again until the element can't be found anymore
		else {
			while ((current-&gt;next-&gt;age != age) and (current-&gt;next
					!= NULL)) {
				current = current-&gt;next;
			}
			if (current-&gt;next != NULL) {
				Person *del = current-&gt;next;
				Person *help = del-&gt;next;
				current-&gt;next = help;
				delete del;
				return Remove(age);
			}
			else{
				return NO_MORE;
			}
		}
		return VALID;
	}
}
</code></pre>
<p>Vielen Dank!<br />
Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275574/rekursiv-mehrere-elemente-aus-einfach-verketteter-liste-löschen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 21:11:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275574.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Oct 2010 13:27:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rekursiv mehrere Elemente aus einfach verketteter Liste löschen on Sun, 17 Oct 2010 13:27:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>verzweifle gerade an einer Methode, die ein oder mehrere Elemente aus einer einfach verketteten Liste löschen soll. Meine Idee war es das ganze mit Rekursion zu lösen, also dass sich die Methode solange selbst aufruft bis sie das zu löschende Element nicht mehr findet.</p>
<p>Im zweiten Rekursionsschritt stürzt mir das Teil jedoch immer ohne wirkliche Fehlermeldung ab, der Debugger sagt nur irgendwas von &quot;suspended&quot; und dann ist es &quot;terminated&quot;.</p>
<p>Löschen möchte ich zum Beispiel alle Personen, die 20 Jahre alt sind.</p>
<p>&quot;Person&quot; habe ich durch folgende Struktur modelliert:</p>
<pre><code class="language-cpp">struct Person {
		string name;
		unsigned int age;
		Person *next;
	};
</code></pre>
<p>So sieht meine Methode aus:</p>
<pre><code class="language-cpp">ListeSimple::ERROR_CODE ListeSimple::Remove(int age) {
	Person *current = head;
	if (head == NULL) {
		return EMPTY_LIST;
	} else {
		// delete first element if it has the right value
		if (head-&gt;age == age) {
			Person *del = head;
			head = head-&gt;next;
			delete del;
			return Remove(age);
		} 
		// go through the list, delete elements with the right value and call the function again until the element can't be found anymore
		else {
			while ((current-&gt;next-&gt;age != age) and (current-&gt;next
					!= NULL)) {
				current = current-&gt;next;
			}
			if (current-&gt;next != NULL) {
				Person *del = current-&gt;next;
				Person *help = del-&gt;next;
				current-&gt;next = help;
				delete del;
				return Remove(age);
			}
			else{
				return NO_MORE;
			}
		}
		return VALID;
	}
}
</code></pre>
<p>Vielen Dank!<br />
Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966696</guid><dc:creator><![CDATA[Kiechlus]]></dc:creator><pubDate>Sun, 17 Oct 2010 13:27:46 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursiv mehrere Elemente aus einfach verketteter Liste löschen on Sun, 17 Oct 2010 14:05:44 GMT]]></title><description><![CDATA[<p>Was passiert denn, wenn bei <code>while ((current-&gt;next-&gt;age != age)</code> das <code>current-&gt;next</code> gleich NULL ist? Irgendwas merkwürdiges sicherlich. Du solltest die Bedingung in der while-Schleife umdrehen, damit dieser Fall ausgeschlossen ist.</p>
<p>Und noch etwas: Das ist das wohl komplizierteste Löschen aus einer Liste, dass ich je gesehen habe. Wie wäre es mit einer einfachen Schleife?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966714</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 17 Oct 2010 14:05:44 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursiv mehrere Elemente aus einfach verketteter Liste löschen on Sun, 17 Oct 2010 14:37:56 GMT]]></title><description><![CDATA[<p>wow, du bist ein Genie, das hätte ich nie gesehen.<br />
Jetzt funktioniert es, tausend DAnk!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966734</guid><dc:creator><![CDATA[Kiechle]]></dc:creator><pubDate>Sun, 17 Oct 2010 14:37:56 GMT</pubDate></item></channel></rss>