链表(创建、插入)

创建链表的代码

#include<iostream>
using namespace std;
//使用结构体表示链表的节点类型 
struct Node{
    int data;
    Node*next;
}; 
int main(){
    Node*head,*p,*q;
    head=NULL;//头指针初始为空 
    int n;//表示需要输入数据的个数 
    cin>>n;
    for(int i=0;i<n;i++){
        int t;
        cin>>t;
        p=new Node;//创建一个新节点 
        p->data=t;//给新节点赋予数值 
        p->next=NULL;//给新节点设置后继指针指向空 
        if(head==NULL){
            head=p;//如果这是第一个创建的节点,则头指针指向这个节点 
        }else{
            q->next=p;//如果不是第一个创建的节点,则将上一个节点的后继指针指向当前节点 
        }
        q=p;//指针q也指向当前节点 
    }
    //输出链表中所有数
    Node*t;
    t=head;
    while(t!=NULL){
        cout<<t->data<<" ";
        t=t->next;//继续下一个节点 
    }
    return 0;
}

这里写图片描述


创建链表且有插入功能的代码

默认我们创建的链表是单调递增的,创建好链表后,我们再输入一个待插入的数值,实现新数值插入后链表还是单调递增

#include<iostream>
using namespace std;
//使用结构体表示链表的节点类型 
struct Node{
    int data;
    Node*next;
}; 
int main(){
    Node*head,*p,*q,*t;
    head=NULL;//头指针初始为空 
    int n;//表示需要输入数据的个数 
    cin>>n;
    for(int i=0;i<n;i++){
        int t;
        cin>>t;
        p=new Node;//创建一个新节点 
        p->data=t;//给新节点赋予数值 
        p->next=NULL;//给新节点设置后继指针指向空 
        if(head==NULL){
            head=p;//如果这是第一个创建的节点,则头指针指向这个节点 
        }else{
            q->next=p;//如果不是第一个创建的节点,则将上一个节点的后继指针指向当前节点 
        }
        q=p;//指针q也指向当前节点 
    }
    //插入数据的代码从这开始,上面是一样的
    int insert;
    cin>>insert;
    t=head;
    while(t!=NULL){
        if(t->next->data>insert){//如果当前节点的下一个节点的值大于待插入数,则将待插入值插入到当前节点的后面 
            p=new Node;//创建一个新节点 
            p->data=insert;//给新节点赋予数值 
            p->next=t->next;//新增结点的后继指针指向当前结点的后继指针所指向的结点
            t->next=p;//当前结点的后继指针指向新增结点
            break;;//插入完毕退出循环
        }
        t=t->next;//继续下一个节点 
    }
    //输出链表中所有数
    t=head;
    while(t!=NULL){
        cout<<t->data<<" ";
        t=t->next;//继续下一个节点 
    }
    return 0;
}

这里写图片描述
一开始创建了大小为5的链表1,6,7,10,11。此时我们插入新数据8,可以看到插入8之后,链表还是保持单调递增的状态

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值