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

来源:互联网 发布:勒夏特列原理 知乎 编辑:程序博客网 时间:2024/06/08 03:08

单链表的头插法和尾插法

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

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

建立单链表的方法

  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();}
原创粉丝点击