初始化链表

初始化链表

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

typedef struct Link {
    int  elem;
    struct Link* next;
}link;

link* initLink();
void display(link* p);

int main() {
    //初始化链表(1,2,3,4)
    printf("初始化链表为:\n");
    link* p = initLink();
    display(p);
    return 0;
}

link* initLink() {
    link* p = (link*)malloc(sizeof(link));//创建一个头结点
    link* temp = p;//声明一个指针指向头结点,用于遍历链表
    //生成链表
    for (int i = 1; i < 5; i++) {
        link* a = (link*)malloc(sizeof(link));
        a->elem = i;
        a->next = NULL;
        temp->next = a;
        temp = temp->next;
    }
    return p;
    
为了便于理解,我将上面的这个函数拆开重写了一遍,它其实就等价于下面这种形式:

link* initLink() {
    link* p = (link*)malloc(sizeof(link));//创建一个头结点
    link* temp = p;//声明一个指针指向头结点,用于遍历链表
    //生成链表

    link* a1 = (link*)malloc(sizeof(link));
    a1->elem = 1;
    a1->next = NULL;
    temp->next = a1;
 
    link* a2 = (link*)malloc(sizeof(link));
    a2->elem = 2;
    a2->next = NULL;
    //a1->next = a2; 
    temp->next->next = a2;

    link* a3 = (link*)malloc(sizeof(link));
    a3->elem = 3;
    a3->next = NULL;
    //a2->next = a3;
    temp->next->next->next = a3;

    link* a4 = (link*)malloc(sizeof(link));
    a4->elem = 4;
    a4->next = NULL;
    //a3->next = a4;
    temp->next->next->next->next = a4;

    link* a5 = (link*)malloc(sizeof(link));
    a5->elem = 5;
    a5->next = NULL;
    //a4->next = a5;
    temp->next->next->next->next->next = a5;

    return p;
 
}
void display(link* p) {
    link* temp = p;//将temp指针重新指向头结点
    //只要temp指针指向的结点的next不是Null,就执行输出语句。
    while (temp->next) {
        temp = temp->next;
        printf("%d ", temp->elem);
    }
    printf("\n");
}
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值