Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Einfach Verkettete Listen (http://www.informatikerboard.de/board/thread.php?threadid=3851)


Geschrieben von snowisblack am 31.01.2018 um 22:40:

  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)


Forensoftware: Burning Board, entwickelt von WoltLab GmbH