So I've written a doubly linked list but when I got to the sort method I started to suffer from heavy derptation.
The code should print out a list of 30 29 28 27 26 25 24 23 22 21, then when the sort is working sort the list 21 22 23 24 25 26 27 28 29 30. But it just prints out the list twice in descending order. Where did I got wrong?
#include<stdio.h>
#include<stdlib.h>
#include"list.h"
int i;
node *p;
node *n;
void insert(node *pointer, int data){
//go through list till ya find the last node
while(pointer->next!=NULL){
pointer = pointer->next;
}
//allocate memory for new node and put data in it
pointer->next = (node *)malloc(sizeof(node));
(pointer->next)->prev= pointer;
pointer = pointer->next;
pointer->data=data;
pointer->next = NULL;
}
void print(node *pointer){
if(pointer==NULL){
return;}
printf("%d ",pointer->data);
print(pointer->next);
}
int init(node *pointer,int find){
pointer =pointer->next;
while(pointer!=NULL){
if(pointer->data== find)//found find
{
printf("The data is in the list.");
return 1;
}
pointer = pointer->next;// Search in the next node.
}
//find is not found
printf("The data is not in the list.");
return 0;
}
void swap (node *x, node *y){
int temp= x->data;
x->data=y->data;
y->data=temp;
}
void sort(node *pointer){
for(i=0;i<10;i++){
if(pointer->data>pointer->next->data){
}else{
swap(pointer,pointer->next);
}
pointer=pointer->next;
}
}
int main(){
//new is used to point to the first node
//temp is for the last node
node *new, *temp;
int z;
new=(node *)malloc(sizeof(node));
temp= new;
temp ->next = NULL;
temp ->prev = NULL;
for(z=0;z<10;z++){
insert(new,(3*10)-z);
}
init(new,12);
init(new,3);
init(new,27);
init(new,7);
print(new);
sort(new);
print(new);
}
The code should print out a list of 30 29 28 27 26 25 24 23 22 21, then when the sort is working sort the list 21 22 23 24 25 26 27 28 29 30. But it just prints out the list twice in descending order. Where did I got wrong?