ヘッドノードのあるチェーンテーブルを使用して逆置き


ヘッドノードのあるチェーンテーブルとヘッドノードのないチェーンテーブルをそれぞれ逆置きする.
ヘッダノードのあるチェーンテーブルは、空のヘッダノードを作成し、最初のノードに従ってチェーンテーブルを作成します.
ヘッドレスノードのチェーンテーブルはポインタを利用して、最初のノードは記憶を開始します.
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; }