一つのアルゴリズムを設計して、リンク表中のすべての結点のリンク方向を「元の場所」に反転させます.つまり、元のテーブルの記憶空間だけを利用して、言い換えれば、アルゴリズムが要求される空間の複雑さはo(1)です.


/*       -          
*   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; }