ヘッドノードのあるチェーンテーブルを使用して逆置き
ヘッドノードのあるチェーンテーブルとヘッドノードのないチェーンテーブルをそれぞれ逆置きする.
ヘッダノードのあるチェーンテーブルは、空のヘッダノードを作成し、最初のノードに従ってチェーンテーブルを作成します.
ヘッドレスノードのチェーンテーブルはポインタを利用して、最初のノードは記憶を開始します.
2つの共通点は,逆置きを行う際に各ノードのポインタの方向を変え,さらに頭と尾をセットすればよいということであり,チェーンテーブルによる逆置きは順序テーブルよりも各ノードの交換を行わずにポインタを変えるだけで便利である.
先頭ノード:
ヘッダノードのあるチェーンテーブルは、空のヘッダノードを作成し、最初のノードに従ってチェーンテーブルを作成します.
ヘッドレスノードのチェーンテーブルはポインタを利用して、最初のノードは記憶を開始します.
2つの共通点は,逆置きを行う際に各ノードのポインタの方向を変え,さらに頭と尾をセットすればよいということであり,チェーンテーブルによる逆置きは順序テーブルよりも各ノードの交換を行わずにポインタを変えるだけで便利である.
先頭ノード:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node//
{
char info;
Node* link;
}*Pnode,*Linklist;
Linklist createNullList_link()//
{
Linklist llist;
llist = (Linklist)malloc(sizeof(Node));//
if(llist != NULL) llist->link = NULL;
return llist;
}
void rev_link(Linklist llist)//
{
Pnode p,q,r; //
p = llist->link; //
if(p == NULL) return; //
q = p->link;
if(q == NULL) return;//
r = q->link;
while(r != NULL)//
{
q->link = p;
p = q;
q = r;
r = r->link;//r
}
q->link = p;//
llist->link->link = NULL;// null
llist->link = q;//
}
int main()
{
Pnode llist,p;
int n,i;
llist = createNullList_link();
if(llist->link == NULL) printf("llist->link is null
");
else printf("not null
");
printf("Input the number of element.
");
scanf("%d",&n);
printf("Input the element:
");
p = llist;
for(i = 0; i < n; i++)
{
p->link = (Linklist)malloc(sizeof(Node));
p = p->link;
p->link = NULL;// null
scanf(" %c", &(p->info));
}
rev_link(llist);//
p = llist->link;
for(i = 0; i < n; i++)
{
printf("%c",p->info);
p = p->link;
}
return 0;
}