單鏈表逆序示例

本程序在LINUX下測序通過。編譯命令: gcc -Wall -g link.c -o link
文件名爲 link.c
#include <stdio.h>
#include <malloc.h>
typedef struct node{
int data;
struct node *next;
}Node;
void reverse(Node **head);
void free_link(Node **head);
int main()
{
     int i = 0;
     Node *head = NULL,*p = NULL,*q = NULL;
     for (i =0; i < 10; i++)
     {
            p = (Node *)malloc(sizeof(Node));
            p->data = i + 1;
            p->next = NULL;
            if (NULL == head)
            {
                 head = p;
                 q = head;
            }
            else
            {
                 q->next = p;
                 q = p;
            }
     }
     q = head;
     while(q)
     {
            printf("%5d",q->data);
            q = q->next;
     }
     printf("\n\n");
    
     reverse(&head);
    
     q = head;
     while(q)
     {
            printf("%5d",q->data);
            q = q->next;
     }
     puts("\n\n");
     free_link(&head);
     return 0;
}

void reverse(Node **head)
{
     Node *p = NULL,*q = NULL;
     p = *head;
     while(p)
     {
            if (NULL == q)
            {
                 q = p;
                 *head = q;
                 p = p->next;
                 (*head)->next = NULL;
            }
            else
            {
                 q = p;
                 p = p->next;
                 q->next = *head;
                 *head = q;
            }
     }
     return;
}
    
void free_link(Node **head)
{
     Node *p;
     int i = 0;
     while(*head)
     {
            p = *head;
            *head = (*head)->next;
            free(p);
            i++;
     }
     printf("%5d\n\n Link free successful\n",i);
     return;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章