#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int key;
struct node *next;
}NODE;
void DisplayNode(NODE *p)
{
while(p->next!=NULL)
{
printf("%d->",p->key);
p = p->next;
}
printf("%d",p->key);
}
int Lookup(NODE * list_a,int x)
{
while(list_a!=NULL)
{
if(list_a->key==x)
return 1;
list_a=list_a->next;
}
return 0;
}
NODE *AppendNode()
{
NODE *head = NULL;
NODE *tail = NULL;
int k;
while(scanf("%d",&k)!=0)//确保输入的数据为整型,输入非数字时结束该过程
{
NODE *p = (NODE*)malloc(sizeof(NODE));
p->key = k;
p->next = NULL;
if(head==NULL)
{
head = p;
tail = p;
}
else
{
tail->next = p;
tail = p;
}
}
getchar();
return head;
}
NODE *Partition(NODE *list_a,int x)
{
NODE *p1 = NULL,*p2= NULL,*p = list_a;
//struct node *Ldata = NULL,*Rdata = NULL;
NODE *pr1=(NODE*)malloc(sizeof(NODE));
NODE *pr2=(NODE*)malloc(sizeof(NODE));
while (p != NULL)
{
if (p->key < x)
{
if (p1 == NULL)
{
p1 = p;
pr1 = p;
}
else
{
p1->next = p;
p1 = p1->next;
}
}
else
{
if (p2 == NULL)
{
p2= p;
pr2 = p;
}
else
{
p2->next = p;
p2= p2->next;
}
}
p = p->next;
}
p1->next = pr2;
p2->next = NULL;
return pr1;
}
int main()
{
int x,choose;
NODE *head = NULL;
NODE *head2 = NULL;
printf("Please input a series of number:(End up with a letter)\n");
head = AppendNode();
printf("You list is:");
DisplayNode(head);
printf("\nplease choose a number you had enter:\n");
scanf("%d",&x);
choose=Lookup(head,x);
while(choose!=1)
{
printf("Enter wrong!Please try again!");
scanf("%d",&x);
choose=Lookup(head,x);
}
head2 =Partition(head,x);
printf("\nAfter sort:\n");
DisplayNode(head2);
}