结构算法 002 单链表的头插法和尾插法

单链表的头插法和尾插法

学习的时候自己拿张白纸画图,学的很快

实在不行看视频,严蔚敏的(视频昏黄,感觉很难受,但是很经典。慕课上也有)

建立单链表的方法

  1. 头插法
  2. 尾插法

废话少说看代码

#include <iostream>
using namespace std;

typedef int elemtype;

typedef struct LNode
{
    elemtype data;
    LNode *next;
}LNode,*LinkList;

//头插法,代码简单,但是输入顺序和链表顺序相反。。
LNode * CreListHead()   //表示函数最后返回指针
{
    LNode *head,*s;
    head=new LNode;
    head->next=NULL;
    int x=0;
    cin>>x;
    while(x!=999)
    {
        s=new LNode;
        s->data=x;
        s->next=head->next;
        head->next=s;
        cin>>x;
    }
    return head;
}

LinkList CreListTail()  //表示函数最后返回指针
{
    //head表示头结点指针,s表示建立新节点的指针,r始终表示队尾指针
    LinkList head,s,r;   //等价于 LNode * head,*s,*r ;
    head=new LNode;
    head->data=1111;
    head->next=NULL;
    r=head;
    int x=0;
    cin>>x;
    while (x!=999)
    {
        s=new LNode;
        s->data=x;
        r->next=s->next;  //意思是把原来队尾节点的指针域(空指针NULL)赋给新队尾节点的指针域。
        r->next=s;
        r=s;
        cin>>x;
    }
    return head;
}

int HeadInsertDemo()
{
    //下面是头插法的效果演示
    LNode *p=CreListHead();
    cout<<"因为使用头插法,所以依次输入1、2、3,链表顺序从左到右是3、2、1"<<endl;
    //因为使用头插法,所以依次输入1、2、3,链表顺序从左到右是3、2、1
    cout<<p->data<<endl;         //头结点没有赋值,所以是一个随机数
    cout<<p->next->data<<endl;   //节点的第一个元素,也就是你输入的 最后 一个元素
    cout<<p->next->next->data<<endl;     //节点的第二个元素,也就是你输入的 倒数 第二个元素
}
int TailInsertDemo()
{
    //下面是尾插法的效果演示
    LinkList p=CreListTail();
    cout<<"**********"<<endl;
    cout<<p->data<<endl;         //头结点我给了它一个值”1111“,所以返回值是1111
    cout<<"**********"<<endl;
    cout<<"The first node is "<<p->next->data<<endl;   //理论上是你输入的第一个元素
    cout<<"The second node is "<<p->next->next->data<<endl;     //理论上是你输入的第二个元素
}
int main()
{
    HeadInsertDemo();
    cout<<"======================"<<endl;
    TailInsertDemo();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值