链表

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

typedef struct NODE
{
    int value;
    struct NODE *next;
} Node, *LinkedList;

LinkedList create_linkedlist(int n)
{
    LinkedList header;
    LinkedList p;
    int i = 0;
    /*创建头节点*/
    header = (LinkedList)malloc(sizeof(Node));
    header->value = n;
    printf("链表的长度是: %3d\n\n", header->value);
    p = header;
    p->next = NULL;
    srand(time(0));
    for(i = 0; i < n; i++)
    {
        /*创建新的节点*/
        LinkedList pn = (LinkedList)malloc(sizeof(Node));
        if(!pn)
        {
            printf("唉,所谓人生...嗯。。。");
            /*无法愉快的玩耍了,我走了!^_^....*/
            exit(-1);
        }
        pn->value = rand() % 100 + 1;
        p->next = pn;
        pn->next = NULL;
        p = pn;
    }
    return header;//header代表了整个链表
}

/*
    输出链表而已,测试链表是否创建成功了。
    唉..果然..心里还是不踏实啊...
*/
void print_list(LinkedList list)
{
    /*
        从第一个节点开始遍历
        list是指向头结点的指针同时也是指向整个链表的指针。
    */
    LinkedList pt = list->next;
    int count = 0;
    while(pt != NULL)
    {
        count++;
        printf("第%d个节点的值是:%3d\n",count, pt->value);
        pt = pt->next;
    }
    printf("\n");
    return;
}

/*
    另一种创建链表的方式
    List: 指向一个链表指针,此处传入表头地址
    size: 节点的个数,不包括头结点

    成功返回1,失败就返回0
*/
int
create_sl_2(LinkedList *List, int size)
{
    LinkedList p = NULL;
    srand(time(0));
    int i = 0;
    *List = (LinkedList)malloc(sizeof(Node));
    if(*List == NULL)
        return -1;
    (*List)->next = NULL;

    for(i = 0; i < size; i++)
    {
        p = (LinkedList)malloc(sizeof(Node));
        if(p == NULL)
            return -1;
        p->value = rand() % 100 + 1;
        p->next = (*List)->next;
        (*List)->next = p;
    }
}
int main()
{
    LinkedList list = NULL;
    //list = create_linkedlist(50);
    //print_list(list);
    if(create_sl_2(&list, 5))
    {
        printf("创建成功...\n\n");
    }else
    {
        printf("创建失败...\n\n");
    }
    print_list(list);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值