单链表— 尾插/头插

带头节点尾插/头插

#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct lnode{
    int data;
    struct lnode *next;
}lnode,*linklist;
bool initlist(linklist &l)								//初始化链表
{
    l=(lnode *)malloc(sizeof(lnode));
    if(l==NULL)
        return 0;
    l->next=NULL;
    return 1;
}
linklist list_headinsert(linklist &l)					//头插法
{
    lnode *s;
    int x;
    l=(lnode *)malloc(sizeof(lnode));
    l->next=NULL;									//养成好习惯,初始化指向null
    cin>>x;
    while(x!=0)
    {
        s=(lnode *)malloc(sizeof(lnode));
        s->data=x;
        s->next=l->next;
        l->next=s;
        cin>>x;
    }
    return l;
}
linklist list_tailinsert(linklist &l)					//尾插法
{
    int x;
    l=(lnode *)malloc(sizeof(lnode));
    lnode *p,*r;
    r=l;
    cin>>x;
    while(x!=0)
    {
        p=(lnode *)malloc(sizeof(lnode));
        p->data=x;
        p->next=NULL;
        r->next=p;
        r=p;
        cin>>x;
    }
    return l;
}
int listlength(linklist l)								//求长度并打印每个节点数据
{
    lnode *p;
    int i=0;
    p=l;
    while(p->next!=NULL)
    {
        cout<<"number "<<i<<" is "<<p->data<<endl;
        i++;
        p=p->next;
    }
    return i;
}
int main() {
    linklist l;											//单链表1,用尾插法
    if(initlist(l))
        cout<<"initlist succeed"<<endl;
	list_tailinsert(l);
	cout<<"length: "<<listlength(l)<<endl;
	linklist l2;										//单链表2,用头插法
	if(initlist(l2))
	    cout<<"initlist l2 succeed"<<endl;
	list_headinsert(l2);
	cout<<"l2length:"<<listlength(l2)<<endl;
	cout  << "over\n";
	return 0;
}
posted @ 2020-08-16 12:32  Cool-baby  阅读(6)  评论(0编辑  收藏  举报