单链表— 尾插/头插
带头节点尾插/头插
#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;
}
作者:Cool baby
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.