<?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[Element aus Liste löschen]]></title><description><![CDATA[<p>möchte beliebiges element aus einfach verketteter liste löschen.</p>
<p>meine methode sieht so aus:</p>
<pre><code>void loeschen( int zahl)
{	
	if (anker == nullptr)
		cout &lt;&lt; &quot;Die Liste ist leer!&quot; &lt;&lt; endl;
	else
	{
		Liste *ptr = anker;

		while (ptr-&gt;next != nullptr) //bis das ende der Liste erreicht ist... 
		{
			if (ptr-&gt;next-&gt;data == zahl)
				break;
			ptr = ptr-&gt;next; //es soll durch die Liste gelaufen werden 
		}

		if (ptr-&gt;next == nullptr &amp;&amp; ptr-&gt;data != zahl)
			cout &lt;&lt; &quot;Element ist nicht in Liste vorhanden!&quot; &lt;&lt; endl;
		else {
			delete ptr-&gt;next; 
			ptr-&gt;next = ptr-&gt;next-&gt;next;

	}
}
</code></pre>
<p>Es wird wenn ich die Liste ausgeben will angezeigt dass es eine zugriffsverletzung gibt.<br />
ich vermute, dass das element zwar gelöscht wurde, aber die liste nicht mehr richtig verkettet ist (?!).<br />
bitte lösung-/hilfvorschläge für die ahnungslosesten der ahnungslosen formulieren.<br />
DANKE</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332063/element-aus-liste-löschen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 19:05:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332063.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Apr 2015 11:32:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 11:32:25 GMT]]></title><description><![CDATA[<p>möchte beliebiges element aus einfach verketteter liste löschen.</p>
<p>meine methode sieht so aus:</p>
<pre><code>void loeschen( int zahl)
{	
	if (anker == nullptr)
		cout &lt;&lt; &quot;Die Liste ist leer!&quot; &lt;&lt; endl;
	else
	{
		Liste *ptr = anker;

		while (ptr-&gt;next != nullptr) //bis das ende der Liste erreicht ist... 
		{
			if (ptr-&gt;next-&gt;data == zahl)
				break;
			ptr = ptr-&gt;next; //es soll durch die Liste gelaufen werden 
		}

		if (ptr-&gt;next == nullptr &amp;&amp; ptr-&gt;data != zahl)
			cout &lt;&lt; &quot;Element ist nicht in Liste vorhanden!&quot; &lt;&lt; endl;
		else {
			delete ptr-&gt;next; 
			ptr-&gt;next = ptr-&gt;next-&gt;next;

	}
}
</code></pre>
<p>Es wird wenn ich die Liste ausgeben will angezeigt dass es eine zugriffsverletzung gibt.<br />
ich vermute, dass das element zwar gelöscht wurde, aber die liste nicht mehr richtig verkettet ist (?!).<br />
bitte lösung-/hilfvorschläge für die ahnungslosesten der ahnungslosen formulieren.<br />
DANKE</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2449350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449350</guid><dc:creator><![CDATA[Dangling]]></dc:creator><pubDate>Tue, 07 Apr 2015 11:32:25 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 11:50:05 GMT]]></title><description><![CDATA[<p>Du greifst nach dem Löschen auf das Element zu.</p>
<p>Ein etwas subtilerer Bug: Kannst du das erste Element deiner Liste löschen (wenn die Liste mehr als ein Element hat)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2449352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449352</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Tue, 07 Apr 2015 11:50:05 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 11:52:26 GMT]]></title><description><![CDATA[<pre><code>if (ptr-&gt;next == nullptr &amp;&amp; ptr-&gt;data != zahl)
    cout &lt;&lt; &quot;Element ist nicht in Liste vorhanden!&quot; &lt;&lt; endl;
else {
    delete ptr-&gt;next; 
    ptr-&gt;next = ptr-&gt;next-&gt;next; // ptr-&gt;next ist bereits freigegeben -&gt; böse Leichenschändung
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2449353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449353</guid><dc:creator><![CDATA[C Newbie]]></dc:creator><pubDate>Tue, 07 Apr 2015 11:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 11:55:44 GMT]]></title><description><![CDATA[<p>ah okay!<br />
und wie kann ich es richtig löschen?</p>
<p>beide zeilen vertauschen wahrscheinlich ja nicht?! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2449354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449354</guid><dc:creator><![CDATA[Dangling]]></dc:creator><pubDate>Tue, 07 Apr 2015 11:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 12:07:07 GMT]]></title><description><![CDATA[<p>Dangling schrieb:</p>
<blockquote>
<p>ah okay!<br />
und wie kann ich es richtig löschen?</p>
<p>beide zeilen vertauschen wahrscheinlich ja nicht?! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
</blockquote>
<p>Was könnte man wohl mit einer Kopie eines Pointers anfangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2449357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449357</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 07 Apr 2015 12:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 12:17:47 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Dangling schrieb:</p>
<blockquote>
<p>ah okay!<br />
und wie kann ich es richtig löschen?</p>
<p>beide zeilen vertauschen wahrscheinlich ja nicht?! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
</blockquote>
<p>Was könnte man wohl mit einer Kopie eines Pointers anfangen?</p>
</blockquote>
<p>weiß ich leider nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2449361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449361</guid><dc:creator><![CDATA[Dangling]]></dc:creator><pubDate>Tue, 07 Apr 2015 12:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 12:22:05 GMT]]></title><description><![CDATA[<p>hab es jetzt so angestellt</p>
<pre><code>void loeschen(int zahl)
	{
		if (anker == nullptr)
			cout &lt;&lt; &quot;Die Liste ist leer!&quot; &lt;&lt; endl;
		else
		{
			Liste *ptr = anker;
			Liste *lptr ; //zulöschender pointer

			if (ptr-&gt;data == zahl)
			{
				anker = ptr-&gt;next;
				delete ptr;

			}

			else{

				while (ptr-&gt;next != nullptr) //bis das ende der Liste erreicht ist... 
				{
					if (ptr-&gt;next-&gt;data == zahl)
						break;
					ptr = ptr-&gt;next; //es soll durch die Liste gelaufen werden 
				}

				if (ptr-&gt;next == nullptr &amp;&amp; ptr-&gt;data != zahl)
					cout &lt;&lt; &quot;Element ist nicht in Liste vorhanden!&quot; &lt;&lt; endl;
				else
				{
					lptr = ptr-&gt;next;
					ptr-&gt;next = ptr-&gt;next-&gt;next;
					delete lptr;
				}
			}
		}
	}
</code></pre>
<p>Elemente lassen sich löschen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2449363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449363</guid><dc:creator><![CDATA[Dangling]]></dc:creator><pubDate>Tue, 07 Apr 2015 12:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 12:28:43 GMT]]></title><description><![CDATA[<p>Dangling schrieb:</p>
<blockquote>
<p>Elemente lassen sich löschen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Auch das letzte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2449364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449364</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 07 Apr 2015 12:28:43 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 12:31:27 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Dangling schrieb:</p>
<blockquote>
<p>Elemente lassen sich löschen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Auch das letzte?</p>
</blockquote>
<p>als ichs grad probiert hab schon!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2449366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449366</guid><dc:creator><![CDATA[Dangling]]></dc:creator><pubDate>Tue, 07 Apr 2015 12:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 12:53:40 GMT]]></title><description><![CDATA[<p>kann mir jemand bei nem ähnlichen Problem helfen?<br />
möchte kleinstes element in liste löschen!</p>
<p>sieht immoment so aus:</p>
<pre><code>void kleinstes_loeschen()
	{
		if (anker == nullptr)
			cout &lt;&lt; &quot;Die Liste ist leer!&quot;;
		else
		{
			int k = anker-&gt;data; //annahme: anker kleinstes element
			Liste *ptr = anker; //Zeiger um Liste zu durchlaufen
			Liste *ptr2; //Zeiger auf kleinstes Element 

			if (anker-&gt;next == nullptr) //nur 1 Element in Liste
			{
				ptr2 = ptr;
				anker = ptr-&gt;next;
				delete ptr2; ptr=nullptr;
			}
			else
			{
				ptr2 = ptr;

				Liste *ptr = anker;

				while (ptr-&gt;next != nullptr)
				{
					if (ptr-&gt;next-&gt;data &lt; k)
					{
						k = ptr-&gt;next-&gt;data;
						ptr2 = ptr-&gt;next;
					}
					ptr = ptr-&gt;next;
				}

				if (k == anker-&gt;data)
				{
					anker = ptr-&gt;next;
					delete ptr; delete ptr2;
				}
				else
				{   ptr-&gt;next = ptr-&gt;next-&gt;next;
					delete ptr2; 
				}
			}
		}
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2449367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449367</guid><dc:creator><![CDATA[Dangling]]></dc:creator><pubDate>Tue, 07 Apr 2015 12:53:40 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Liste löschen on Tue, 07 Apr 2015 15:01:23 GMT]]></title><description><![CDATA[<p>In Zeile 36 löscht du 2 Knoten. Das erscheint unplausibel.<br />
Eine Funktion sollte nach Möglichkeit nur eine Aufgabe erfüllen, das vereinfacht diese und macht es einfacher, die Korrektheit zu überprüfen. Das Finden des kleinsten Elementes und das Löschen eines Elementes sind hinreichend verschieden, dass es zweckmäßig erscheint, hierfür verschiedene Funktionen zu verwenden.<br />
z.B.</p>
<pre><code class="language-cpp">void loesche_element(Liste*&amp; element)
// Trick: wir betrachten nicht den Knoten selbst, sondern den Zeiger, der den Knoten besitzt
// damit verschwindet der Spezialfall des ersten Knotens
{
    if ( Liste* p = element )
    {
        element = element-&gt;next;
        delete p;
    }
}

Liste*&amp; finde_kleinstes_element(Liste*&amp; anker)
{
    Liste** p = &amp;anker;
    for ( Liste** q = p; *q != nullptr; q = q-&gt;next )
        if ( (*q)-&gt;data &lt; (*p)-&gt;data ) // der erste Vergleich ist eigentlich überflüssig, allerdings müsste man
                                       // andernfalls Spezialfälle behandeln
            p = q;
    return *p;
}

void loesche_kleinstes_element(Liste*&amp; anker)
{
    loesche_element( finde_kleinstes_element( anker ) );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2449389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449389</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 07 Apr 2015 15:01:23 GMT</pubDate></item></channel></rss>