单链表的头插法和尾插法
学习的时候自己拿张白纸画图,学的很快
实在不行看视频,严蔚敏的(视频昏黄,感觉很难受,但是很经典。慕课上也有)
建立单链表的方法
- 头插法
- 尾插法
废话少说看代码
#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();
}