#define IN_ORDER(s1,s2) (((s1)->val) < ((s2)->val))
typedef struct elevateList {
int val;
struct elevateList* next;
}EL;
void printfList(EL* A) {
EL* tmp = A;
for (; tmp; tmp = tmp->next) {
//cout << tmp->val << " ";
printf("%d ",tmp->val);
}
//cout << endl;
printf("\n");
}
void elInsert(EL* tmp, EL* req) {
EL* tmp1 = tmp;
//cout << "insert " << req->val << endl;
printf("insert:%d\n",req->val);
printfList(tmp);
for (; tmp1->next; tmp1 = tmp1->next)
#if 0
if ((IN_ORDER(tmp1, req) || !IN_ORDER(tmp1, tmp1->next))
&& IN_ORDER(req, tmp1->next))
#else
//IN_ORDER(s1,s2) (((s1)->val) < ((s2)->val))
if (((((tmp1)->val) < ((req)->val)) || !(((tmp1)->val) < ((tmp1->next)->val))) &&
(((req)->val) < ((tmp1->next)->val)))
#endif
{
break;
}
req->next = tmp1->next;
tmp1->next = req;
printfList(tmp);
//cout << endl;
}
测试代码
EL A = { 53, NULL };
EL req = { 10, NULL };
EL B = { 183, NULL }, C = { 37, NULL }, D = { 122, NULL }, E = { 14, NULL }, \
F = { 124, NULL }, G = { 65, NULL }, H = { 67, NULL }; EL I = { 11, NULL };
EL* tmp = &A;
elInsert(tmp, &req);
elInsert(tmp, &B);
elInsert(tmp, &C);
elInsert(tmp, &D);
elInsert(tmp, &E);
elInsert(tmp, &F);
elInsert(tmp, &G);
elInsert(tmp, &H);
while(1)
{
}
运行结果