任务描述
本关任务:按照数据输入的顺序构建一个线性表。即如果输入的3个结点数据分别为1、2、3
,则构建的线性表包含3个结点,且从前往后的结点数据分别为1、2、3
。
#include "linearList.h"
node *insertTail(node *h, node *t)
{
// 请在此添加代码,补全函数insertTail
/********** Begin *********/
if(h==NULL) //如果头结点为空,t结点即为头结点。
{
t->next=NULL;
return t;
}
node *p=h;
while(p->next){
p=p->next;
}
p->next=t;
t->next=NULL;
return h;
/********** End **********/
}
#include "linearList.h"
int main()
{
int n,i;
node *t;
node *head=NULL; // 头指针为NULL,表示线性表为空,结点数为0
// 输入结点数
cin>>n;
for(i=0;i<n;i++)
{
// 为新节点动态分配空间
t = new node;
cin>>t->data; // 输入结点数据
t->next=NULL; // 结点指针域值为空
// 调用函数插入结点
head = insertTail(head, t);
}
// 输出链表
printList(head);
// 删除结点,释放空间
delList(head);
return 0;
}
// 函数delList:删除链表,释放空间
// 参数:h-链表头指针
void delList(node *h)
{
node *p=h; // 指针p指向头结点,第一个要删除的结点
while(p) // 这个结点是存在的
{
h = h->next; // 头指针h指向下一个结点(下一个结点的地址存在当前结点的指针域中,即h->next中
delete p; // 删除p指向的结点
p = h; // p指向当前的头结点,即下一个要删除的结点
}
}
// 函数printList:输出链表,每个数据之间用一个空格隔开
// 参数:h-链表头指针
void printList(node *h)
{
cout<<"List:";
while(h)
{// h为真,即h指向的结点存在,则输出该结点的数据
cout<<" "<<h->data; // 输出结点数据
h=h->next; // 将该结点的指针域赋值给h,h就指向了下一个结点
}
cout<<endl; // 输出换行符
}