一つのアルゴリズムを設計して、リンク表中のすべての結点のリンク方向を「元の場所」に反転させます.つまり、元のテーブルの記憶空間だけを利用して、言い換えれば、アルゴリズムが要求される空間の複雑さはo(1)です.
1607 ワード
/* -
* 53 2.7
* : , “ ” , ,
* , o(1).
* :VC 6.0
*/
#include
#include
#define ERROR -1
#define OK 1
typedef int elemType;
typedef struct listnode
{
elemType data;
struct listnode *next;
}listnode,*link;
void initList(link &list)
{
list=(link)malloc(sizeof(listnode));
list->next=NULL;
}
int ListInsert(link &list,int i,elemType num)//
{
link p,q;
int j=0;
p=list;
while(p && jnext;
j++;
}
if(!p || j>i-1)return ERROR;
q=(link)malloc(sizeof(listnode));
q->data=num;
q->next=p->next;
p->next=q;
return OK;
}
void printList(link list)
{
link p=list->next;
while(p)
{
printf("%d,",p->data);
p=p->next;
}
printf("
");
}
link turnList(link &list)//
{
link p,q,r;
p=list->next;// list
q=list->next->next;// list
r=list->next->next->next;// list
while(r)
{
q->next=p;//
p=q;
q=r;
r=r->next;// p,q,r
}
r=q;//
q->next=p;//
list->next->next=NULL;// NULL
list->next=r;//
return list;
}
int main()
{
link list1;
int count=1,flag;
initList(list1);
for(int i=1;i<=20;i+=2)
{
flag=ListInsert(list1,count,i);
count++;
}
printf(" :");
printList(list1);
list1=turnList(list1);
printf("
:
");
printList(list1);
return 0;
}