#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
typedef struct student
{
int data;
struct student *next;
}node;
node *create()
{
node *head, *p, *s;
int x, cycle = 1;
head = (node *)malloc(sizeof(node));
p = head;
while (cycle)
{
printf("Please input the data:");
scanf("%d", &x);
if (x != 0)
{
s = (node *)malloc(sizeof(node));
s->data = x;
printf("%d\n", s->data);
p->next = s;
p = s;
}
else
cycle = 0;
}
//head = head->next;
p->next = NULL;
return head;
}
int lenght(node *head)
{
int i = 0;
node *p;
p = head;
while(p != NULL)
{
p = p->next;
i++;
}
return i;
}
void print(node *head)
{
printf("The list data elements:\n");
node *p;
p = head;
while (p != NULL)
{
if (p->next == NULL)
{
break;
}
p = p->next;
printf("%d\n", p->data);
}
return;
}
node *deletes(node *head, int num)
{
node *p1, *p2;
p1 = head;
while (num != p1->data && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if (num == p1->data)
{
if (p1 == head)
{
head = p1->next;
free(p1);
}
else
p2->next = p1->next;
}
else
printf("%d could not been found", num);
return head;
}
node *insert(node *head, int num)
{
node *p0, *p1, *p2;
p1 = head;
p0 = (node *)malloc(sizeof(node));
p0->data = num;
//cout << p1->data;
while (p0->data > p1->data && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if (p0->data <= p1->data)
{
if (head == p1)
{
p0->next = p1;
head = p0;
}
else
{
p2->next = p0;
p0->next = p1;
}
}
else
{
p1->next = p0;
p0->next = NULL;
}
return head;
}
node *sort(node *head)
{
node *p, *p2, *p3;
int n;
int temp;
n = lenght(head);
if (head == NULL || head->next == NULL)
{
return head;
}
p = head;
for (int j = 1; j < n; ++j)
{
p = head;
for (int i = 0; i < n - j; ++i)
{
if (p->data > p->next->data)
{
temp = p->data;
p->data = p->next->data;
p->next->data = temp;
}
p = p->next;
}
}
return head;
}
node *reverse(node *head)
{
node *p1, *p2, *p3;
if (head == NULL || head->next == NULL)
{
return head;
}
p1 = head;
p2 = p1->next;
while (p2)
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
head->next = NULL;
head = p1;
return head;
}
int main(int argc, char *argv[])
{
node *head;
int x;
head = create();
printf("Lenght of the list:%d", lenght(head));
print(head);
printf("Input the data that you want to delete from the list:");
scanf("%d", &x);
head = deletes(head, x);
print(head);
printf("Input the data that you want to insert to the list:");
scanf("%d", &x);
insert(head, x);
print(head);
return 0;
}