头插法创建新链表

代码如下: 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 定义节点结构
typedef struct Nodename{
    int data;
    struct Nodename *next;
} Node;

int main(int argc, const char * argv[]) {
    // 头插法创建链表
    
    // 创建头节点
    Node headNode;
    Node *head = &headNode;
    head -> data = 0;
    head -> next = NULL;
    
    // 此循环用于对var的输入,当输入-1时停止输入
    while (true){
        int var;
        printf("请输入数据:");
        scanf("%d", &var);
        
        // 创建新节点并给新节点分配内存
        Node * pnewNode = malloc(sizeof(Node));
        pnewNode->data = 0;
        pnewNode->next = NULL;
        
        if (var == -1)
            break;
        /* 先将数据存入新节点,再将头节点的next的地址存入新节点的next,最后将新节点的指针存入头节点的next中,后面两者顺序不能颠倒。*/
        pnewNode -> data = var;
        pnewNode->next = head -> next;
        head -> next = pnewNode;
    }
    // 此处p用于遍历链表
    Node*p;
    // 初始化p为链表的头,p代表当前节点
    p=head;
    printf("------------\n");
    // 如果p的next为空指针,则停止遍历
    while(true)
    {
        if (p->next == NULL)
            break;
        /* p变成next所指的节点,此处先改变当前节点后输出当前的值,是因为一开始p值的是头节点,头节点的值为0 */
        p = p->next;
        printf("%d\n",p->data);
        
    }
    return 0;
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hymannnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值