算法:C语言实现 (3)链表的逆序

#include <stdlib.h>
#include <stdio.h>

typedef struct node *link;
struct node {
    int item;
    link next;
};

link reverse(link x)
{
    link r = NULL, y = x, t;
    while (y != NULL)
    {
        t = y->next;
        y->next = r;
        r = y;
        y = t;
    }    
    return r;
}

int main()
{
    int i, N = 9;
    struct node heada;
    link p,r;

    heada.item = rand()%1000;
    heada.next = NULL;

    for (p = &heada, i = 0; i < N; i++)
    {
        p = (p->next = (link)malloc(sizeof(*p)));
        p->next = NULL;
        p->item = rand()%1000;
    }

    for (i = 0, p = &heada; p != NULL; p = p->next, i++)
    {
        printf("链表中的第%d个数据是:%2d\n", i, p->item);
    }

    r = reverse(&heada);
    printf("\n逆序后的数据\n\n");
    for (i = 0, p = r; p != NULL; p = p->next, i++)
    {
        printf("链表中的第%d个数据是:%2d\n", i, p->item);
    }
}

 

有什么不对的地方, 请大侠不吝指教啊^_^

posted @ 2013-10-27 14:01  CJin  阅读(499)  评论(0编辑  收藏  举报