Сформировать новый список в котором элементы расположены в порядке возростания - C (СИ)
Формулировка задачи:
Дан список F=<1,8,9,0,1,3,2,4,1,12,23,1,23,2,19,1>.Сформирова ть новый список в котором элементы расположены в порядке возростания.Программка не работает,незнаю где ошибка))Что-то не так с SortList(((
Решение задачи: «Сформировать новый список в котором элементы расположены в порядке возростания»
textual
Листинг программы
#include "stdafx.h"
#include <locale.h>
#include <conio.h>
struct Node {
int value;
Node *link;
};
typedef struct Node NODE;
void initNode(NODE **head,int val);
void addNodeToEnd(NODE *head,int val);
void VuvestuSpusok (NODE *head,char text[]="");
void SortList(NODE **head);
void DodatuZna4ennya(NODE **head,int val);
int _tmain(int argc, _TCHAR* argv[])
{
setlocale (LC_ALL, "Rusian");
NODE *firstHead=NULL,*SpusokNew=NULL;
int masuv[]={1,8,9,0,1,3,2,4,1,12,23,1,23,2,19,1};
for (int i=0;i<16;i++)
{
DodatuZna4ennya(&firstHead, masuv[i]);
}
VuvestuSpusok(firstHead,"начальный");
SortList(&firstHead);
VuvestuSpusok(SpusokNew,"новый");
getch();
return 0;
}
void initNode(NODE **head,int val)
{
*head = new NODE;
(*head)->value=val;
(*head)->link=NULL;
}
void addNodeToEnd(NODE *head,int val)
{
NODE *new_node, *temp=head;
while (1)
{
if (temp->link==NULL) {break;}
else {temp=temp->link;}
}
new_node = new NODE;
new_node->value=val;
new_node->link=temp->link;
temp->link=new_node;
}
void VuvestuSpusok (NODE *head,char text[])
{
printf("spusok %s --> ",text);
NODE *temp=head;
while (1)
{
if(temp == NULL)
{
printf("\n");
break;
}
else
{
printf("%d",temp->value);
temp=temp->link;
}
}
}
void SortList(NODE **head)
{
NODE *node_old1=*head;
NODE *node_old2;
NODE *node_new1,*node_new2;
node_new1=node_old1;
node_old2=node_old1->link;
node_new1->link =NULL;
node_old1=node_old2;
while (node_old1!=NULL)
{
if (node_old1->value < node_new1->value)
{
node_old2=node_old1->link;
node_old1->link = node_new1;
node_new1=node_old1;
node_old1=node_old2;
}
else
{
node_new2=node_new1;
while (node_new2->link !=NULL)
{
if ((node_new2->link)->value > (node_old1->value)) break;
node_new2 = node_new2->link;
}
node_old2=node_old1->link;
node_old1->link = node_new2->link;
node_new2->link=node_old1;
node_old1=node_old2;
}
}
*head=node_new1;
}
void DodatuZna4ennya(NODE **head,int val)
{
if((*head)==NULL){initNode(&(*head),val);}
else{addNodeToEnd((*head),val);}
}