Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Einfach Verkettete Listen » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Der letzte Beitrag
snowisblack Einfach Verkettete Listen

Meine Frage:
Hallo an alle,
Ich habe folgende Aufgabe zu bewältigen:
Implementieren Sie für eine einfach verkettete Liste folgende zwei Funktionen:
- void insert sorted (int val), zum sortierten Einfügen eines neuen Elements val und
- struct node *reverse(), zur Rückgabe einer invertierten Liste ohne die Liste zu verändern

Nun die erste Aussage habe ich so interpretier, dass einfach ein Element angehangen werden soll, was dann den Platz des vorletzten Elementes einnimmt.
Nur die zweite Aussage verstehe ich nicht so richtig. Soll ich einfach die Liste ausgeben oder soll die Funktion etwas anderes machen?
Danke schon einmal für eure Antworten!


Meine Ideen:
Hier mein bisheriger Ansatz:
#include<stdio.h>
#include<stdlib.h>

typedef struct
{
int data;
struct node *next;
}node;

node *addElement(int val)
{
node *nextElement = NULL;
if ((nextElement = malloc(sizeof(node)))!=0){
nextElement->data = val;
nextElement->next = NULL;
return nextElement;}
else {return NULL;}
}
node *head,*tail;
void insertFirst(int val)
{
node *p = addElement(val);
p->next = head;
head = p;
}

void insertLast(int val)
{
node *p = addElement(val);
if(head == NULL){head = p;}else{tail=p;}
tail=p;
}
void printList(void)
{
node *tmp = head;
printf("(");
while(tmp != NULL)
{
printf(" %d ",tmp->data);
tmp = tmp->next;
}
printf(")\n");
}

int main(int argc,char argv[])
{
int n;int i = 1;int a;
printf("Anzahl der Werte ihrer Liste: ");
scanf("%d",&n);
printf("%d. Wert: ",i);
scanf("%d",&a);
node *Element[n], *aktuellesElement;
insertFirst(a);
i++;
while (i<n)
{
printf("%d. Wert: ",i);
scanf("%d",&a);
Element[i]=addElement(a);
if(i>=3)Element[i-1]->next = Element[i];
i++;
}
printf("%d. Wert: ",i);
scanf("%d",&a);
insertLast(a);
head->next = Element[2];
Element[i-1]->next = tail;
tail->next = NULL;
printList();
}

Falls es allgemeine Verbesserungsvorschläge gibt bin ich dafür auch gerne offen! (Bin noch nicht allzu lange am C-Programmieren)