C++手写链表(头插法和尾插法)

#include
using  namespace  std;

 typedef struct listnode {
    int data;
    listnode* next;
}lnode,*linklist ;//如果说没有加typedef,那么就是变量,如果加上typedef就是取别名
 //LNode,*LinkList均为LNode的别名,
 
//前插法
void createlist_h(linklist&l,int n)
{
   l = new lnode;//先将头节点开辟空间,
    l->next = NULL;//将头节点空
    for (int i = 0; i < n; i++)
    {
     lnode * p = new lnode();//开辟下一个节点
        cin >> p->data;
        p->next = l->next;//第一步是将p的下一个节点置为空(就是尾节点),然后第二步往后就是将新节点的下一个值指向老节点
        l->next = p;//将头节点指向p
    }
}
//尾插法
void createlist_r(linklist &l,int n)
{
    l = new lnode;
    l->next = NULL;
    lnode *r = l;//尾指针指向头指针,记住现在还没有节点
    for (int i = 0; i < n; i++)
    {
       lnode* p = new lnode();
       cin >> p->data;
       p->next = NULL;//将p的下一个置为空,一直要保证p可能为最后一个节点
       r->next = p;//不能调用头指针,调用尾指针
       r = p;
    }

}
void out_list(lnode *L)//输出链表
{
    lnode* p1 = L;
    while (p1)
    {
        cout << p1->data<<" ";
        p1 = p1->next;
    }

}

int main()
{
    linklist L;
   // linklist M;
    int n =0;
    cout << "请输入链表长度" << endl;
    cin >> n;
    createlist_h(L, n);//头插函数
    out_list(L);
    //createlist_r(M, m);//尾插函数
    system("pause");
    return 0;
}

你可能感兴趣的:(链表,c++,数据结构,算法,c语言)