<?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[doppelt verkettete liste]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe ein problem beim löschen in einer doppelt verketteten liste ...</p>
<p>dekl.h</p>
<pre><code class="language-csharp">#include &lt;iostream.h&gt;
#include &lt;conio.h&gt;

class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
         Knoten *pLast;
        };

        Knoten *pFirst;
        int Anzahl;

public:
        Kset();
        ~Kset();

        void show_all();
        void insert_front(int obj);
        void delete_front();
        int anzahlaus();
        void delete_pos(int pos);

};
</code></pre>
<p>impl.cpp</p>
<pre><code class="language-csharp">#include &quot;dekl5.h&quot;

Kset::Kset()
{
 Anzahl = 0;
 pFirst = NULL;
}

Kset::~Kset()
{
 Knoten *ptemp = pFirst;
 for(; Anzahl&gt;0;Anzahl--)
  {
  pFirst = pFirst-&gt;pNext;
  delete ptemp;
  ptemp = pFirst;
  }
}

void Kset::show_all()
{
 Knoten *pTemp = pFirst;
 for(int i=Anzahl; i&gt;0; i--)
 {
  cout&lt;&lt;pTemp-&gt;Inhalt&lt;&lt;&quot; &quot;;
  pTemp=pTemp-&gt;pNext;
 }
}

void Kset::insert_front(int obj)
{
 if(Anzahl == 0)
 {
  pFirst = new Knoten;
  pFirst-&gt;Inhalt = obj;
  pFirst-&gt;pNext = NULL;
  pFirst-&gt;pLast = NULL;
 }
 else
 {
  Knoten *pNew = new Knoten;
  pNew-&gt;Inhalt = obj;
  pNew-&gt;pLast = NULL;
  pNew-&gt;pNext = pFirst;
  pFirst = pNew;
 }
Anzahl++;
}

void Kset::delete_front()
{
 if(Anzahl == 0)
 {
  cout&lt;&lt;&quot;Nix da zum loeschen&quot;&lt;&lt;endl;
 }
 if(Anzahl == 1)
 {
  delete pFirst;
  pFirst = NULL;
  Anzahl = 0;
 }

 if(Anzahl &gt; 1)
 {
 Knoten *ptemp = pFirst;
 pFirst = pFirst-&gt;pNext;
 delete ptemp;
 Anzahl--;
 }
}

int Kset::anzahlaus()
{
 return Anzahl;
}

void Kset::delete_pos(int pos)
{
 if((Anzahl == 0)||(pos&gt;=Anzahl))
  {
   cout&lt;&lt;&quot;Nichts da zum loeschen&quot;&lt;&lt;endl;
  }
 if(pos==0)
  {
   Knoten *ptemp = pFirst;
   pFirst = pFirst-&gt;pNext;
   ptemp-&gt;Inhalt = 0;
   Anzahl--;
  }
 else
 {
  Knoten *ptemp = pFirst;
  for(int i; i&lt;pos; i++)
   ptemp = ptemp-&gt;pNext;

  ptemp-&gt;pLast-&gt;pNext = ptemp-&gt;pNext;
  if(ptemp-&gt;pNext != NULL)
   ptemp-&gt;pNext-&gt;pLast = ptemp-&gt;pLast;

  ptemp-&gt;Inhalt = 0;
  delete ptemp;
  Anzahl--;
 }
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-csharp">#include &quot;dekl5.h&quot;

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{

Kset k;

k.insert_front(1);
k.insert_front(2);
k.insert_front(3);
k.insert_front(4);
k.insert_front(5);

cout&lt;&lt;&quot;Ausgabe der Liste: &quot;&lt;&lt;endl;
k.show_all();

k.delete_front();
cout&lt;&lt;&quot;\n\nAusgabe der Liste - erstes Element geloescht &quot;&lt;&lt;endl;
k.show_all();

cout&lt;&lt;&quot;\n\nAn Position loeschen &quot;&lt;&lt;endl;
k.delete_pos(1);

k.show_all();

        getch();
        return 0;
}
//---------------------------------------------------------------------------
</code></pre>
<p>wenn ich die methode delete_pos() aufrufe und ihr sage, dass sie z.B. den 2. Knoten löschen soll, stürzt das Programm mit einer &quot;EAccess Violation&quot; ab ... wo hab ich den fehler gemacht?</p>
<p>thx <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/topic/139593/doppelt-verkettete-liste</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 17:26:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139593.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Mar 2006 20:23:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to doppelt verkettete liste on Tue, 07 Mar 2006 20:23:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe ein problem beim löschen in einer doppelt verketteten liste ...</p>
<p>dekl.h</p>
<pre><code class="language-csharp">#include &lt;iostream.h&gt;
#include &lt;conio.h&gt;

class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
         Knoten *pLast;
        };

        Knoten *pFirst;
        int Anzahl;

public:
        Kset();
        ~Kset();

        void show_all();
        void insert_front(int obj);
        void delete_front();
        int anzahlaus();
        void delete_pos(int pos);

};
</code></pre>
<p>impl.cpp</p>
<pre><code class="language-csharp">#include &quot;dekl5.h&quot;

Kset::Kset()
{
 Anzahl = 0;
 pFirst = NULL;
}

Kset::~Kset()
{
 Knoten *ptemp = pFirst;
 for(; Anzahl&gt;0;Anzahl--)
  {
  pFirst = pFirst-&gt;pNext;
  delete ptemp;
  ptemp = pFirst;
  }
}

void Kset::show_all()
{
 Knoten *pTemp = pFirst;
 for(int i=Anzahl; i&gt;0; i--)
 {
  cout&lt;&lt;pTemp-&gt;Inhalt&lt;&lt;&quot; &quot;;
  pTemp=pTemp-&gt;pNext;
 }
}

void Kset::insert_front(int obj)
{
 if(Anzahl == 0)
 {
  pFirst = new Knoten;
  pFirst-&gt;Inhalt = obj;
  pFirst-&gt;pNext = NULL;
  pFirst-&gt;pLast = NULL;
 }
 else
 {
  Knoten *pNew = new Knoten;
  pNew-&gt;Inhalt = obj;
  pNew-&gt;pLast = NULL;
  pNew-&gt;pNext = pFirst;
  pFirst = pNew;
 }
Anzahl++;
}

void Kset::delete_front()
{
 if(Anzahl == 0)
 {
  cout&lt;&lt;&quot;Nix da zum loeschen&quot;&lt;&lt;endl;
 }
 if(Anzahl == 1)
 {
  delete pFirst;
  pFirst = NULL;
  Anzahl = 0;
 }

 if(Anzahl &gt; 1)
 {
 Knoten *ptemp = pFirst;
 pFirst = pFirst-&gt;pNext;
 delete ptemp;
 Anzahl--;
 }
}

int Kset::anzahlaus()
{
 return Anzahl;
}

void Kset::delete_pos(int pos)
{
 if((Anzahl == 0)||(pos&gt;=Anzahl))
  {
   cout&lt;&lt;&quot;Nichts da zum loeschen&quot;&lt;&lt;endl;
  }
 if(pos==0)
  {
   Knoten *ptemp = pFirst;
   pFirst = pFirst-&gt;pNext;
   ptemp-&gt;Inhalt = 0;
   Anzahl--;
  }
 else
 {
  Knoten *ptemp = pFirst;
  for(int i; i&lt;pos; i++)
   ptemp = ptemp-&gt;pNext;

  ptemp-&gt;pLast-&gt;pNext = ptemp-&gt;pNext;
  if(ptemp-&gt;pNext != NULL)
   ptemp-&gt;pNext-&gt;pLast = ptemp-&gt;pLast;

  ptemp-&gt;Inhalt = 0;
  delete ptemp;
  Anzahl--;
 }
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-csharp">#include &quot;dekl5.h&quot;

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{

Kset k;

k.insert_front(1);
k.insert_front(2);
k.insert_front(3);
k.insert_front(4);
k.insert_front(5);

cout&lt;&lt;&quot;Ausgabe der Liste: &quot;&lt;&lt;endl;
k.show_all();

k.delete_front();
cout&lt;&lt;&quot;\n\nAusgabe der Liste - erstes Element geloescht &quot;&lt;&lt;endl;
k.show_all();

cout&lt;&lt;&quot;\n\nAn Position loeschen &quot;&lt;&lt;endl;
k.delete_pos(1);

k.show_all();

        getch();
        return 0;
}
//---------------------------------------------------------------------------
</code></pre>
<p>wenn ich die methode delete_pos() aufrufe und ihr sage, dass sie z.B. den 2. Knoten löschen soll, stürzt das Programm mit einer &quot;EAccess Violation&quot; ab ... wo hab ich den fehler gemacht?</p>
<p>thx <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/1011003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1011003</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Tue, 07 Mar 2006 20:23:13 GMT</pubDate></item><item><title><![CDATA[Reply to doppelt verkettete liste on Wed, 08 Mar 2006 07:25:53 GMT]]></title><description><![CDATA[<p>Du müsstest im insert_front() auf jeden Fall noch den Vorgänger-Zeiger des alten Front-Elements auf das neue umbiegen, sonst kannst du darauf beim Löschen nicht zugreifen. (schau dir mal die Elemente im Debugger an, dann siehst du, was ich meine)</p>
<p>PS: Wenn es dir nur um das Ergebnis geht, nimm lieber std::list statt etwas eigenes zu basteln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1011223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1011223</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 08 Mar 2006 07:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to doppelt verkettete liste on Wed, 08 Mar 2006 09:37:10 GMT]]></title><description><![CDATA[<p>okay - danke <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>
<p>Aber mal noch ne Frage:<br />
Kann ich bei der doppelt verketteten Liste auch noch nen Zeiger auf den letzten Knoten festlegen ... also so:</p>
<pre><code class="language-csharp">class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;   // Zeiger auf nachfolger
         Knoten *pfront;  // Zeiger auf vorgänger
        };

        Knoten *pFirst;   // Zeiger auf ersten Knoten in Liste
        Knoten *pLast;    // Zeiger auf letzten Knoten in Liste
        int Anzahl;
</code></pre>
<p>stat</p>
<pre><code class="language-csharp">class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
         Knoten *pLast;
        };

        Knoten *pFirst;
        int Anzahl;
</code></pre>
<p>thx im voraus <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/1011294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1011294</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Wed, 08 Mar 2006 09:37:10 GMT</pubDate></item><item><title><![CDATA[Reply to doppelt verkettete liste on Wed, 08 Mar 2006 09:43:53 GMT]]></title><description><![CDATA[<p>Ja, kannst du - nur solltest du diesen Zeiger bei deinen insert- und remove-Methoden auch mit berücksichtigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1011305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1011305</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 08 Mar 2006 09:43:53 GMT</pubDate></item><item><title><![CDATA[Reply to doppelt verkettete liste on Wed, 08 Mar 2006 09:59:53 GMT]]></title><description><![CDATA[<p>jup - mach ich</p>
<p>danke <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/1011322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1011322</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Wed, 08 Mar 2006 09:59:53 GMT</pubDate></item></channel></rss>