シングルリストのいくつかの問題


(1)試行編纂アルゴリズムは率先してシングルチェーン表をその場で逆置する.「その場で」とは補助空間がO(1)であることを意味する.
【解析】
この問題には二つの解法があります.
aヘッドノードを外して、ヘッドセット法でチェーンテーブルを作ると、いわゆる定位置逆置bが順次巡回して針を反転させますが、最後のノードは、両アルゴリズムの時間の複雑さはO(n)で、空間はすべてO(1)です.
【アルゴリズム】
最初のアルゴリズム:
//    
int LinkListRerverse(LinkList *head){
	LinkList *q,*p;
	p = head->next;
	head->next = NULL;
	while(p != NULL){
		q = p->next;
		p->next = head->next;
		head->next = p;
		p = q;
	}
	return 0;
}
完全な例:
#include<stdio.h>
#include<malloc.h>

typedef struct Node
{
	int data;
	struct Node *next;
}LinkList;

//    
int LinkListRerverse(LinkList *head){
	LinkList *q,*p;
	p = head->next;
	head->next = NULL;
	while(p != NULL){
		q = p->next;
		p->next = head->next;
		head->next = p;
		p = q;
	}
	return 0;
}
//    
int LinkListPrintf(LinkList *head){
	LinkList *p;
	p = head;
	while(p->next){
		p = p->next;
		printf("%d ",p->data);
	}
	printf("
"); return 0; } // int LinkListCreate(LinkList *head,int n){ LinkList *p,*newNode; head->next = NULL; p = head; // for(int i = 0;i < n;i++){ // newNode = (LinkList*)malloc(sizeof(LinkList)); scanf("%d",&newNode->data); newNode->next = p->next; p->next = newNode; p = newNode; } return 0; } int main() { int n; while(scanf("%d",&n) != EOF){ LinkList *head; head = (LinkList*)malloc(sizeof(LinkList)); // (n ) LinkListCreate(head,n); // LinkListPrintf(head); // LinkListRerverse(head); // LinkListPrintf(head); } return 0; }