結構算法 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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章