2.14在带头结点的单链表中进行Length操作
循环累加
代码如下:
LinkList_Length.cpp
#include "LinkList_Length.h"
#include "math.h"
LinkList_Length::LinkList_Length(void)
{
}
void LinkList_Length::InitLinklist(LinkList &L){
L =(LinkList)malloc(sizeof(LNode));//产生头结点
if(!L)exit(OVERFLOW);//分配失败
(L)->next=NULL;//L->next指向空
}
int LinkList_Length::Insert_LinkList(LinkList &L){//向单链表中插入数据
LinkList p=L;
char a;
cout<<"请输入任意一个字符:";
cin>>a;
char flag='Y';
while (flag != 'N'||flag == 'n')
{
LinkList s = (LinkList)malloc(sizeof(LNode));//生成一个结点
s->data=a;
s->next=NULL;
p->next=s;
p=s;
cout<<"还要继续添加结点吗?('Y'OR'N')";
cin>>flag;
if (flag=='Y'||flag == 'y')
{
cout<<"请输入任意一个字符:";
cin>>a;
}
}
return 0;
}
void LinkList_Length::OutLinkList(LinkList L){//输出链表中的数据
LinkList p=L->next;
while(p){
cout<<(char)p->data<<endl;
p=p->next;
}
}
int LinkList_Length::Linklist_Len(LinkList L){//计算链表的长度
LinkList p=L->next;
int len=0;
while(p){
len++;
p=p->next;
}
return len;
}
LinkList_Length::~LinkList_Length(void)
{
}
LinkList_Length.h
#pragma once
#include <iostream>
using namespace std;
typedef struct LNode//定义结点
{
int data;
struct LNode *next;
}LNode,*LinkList;
class LinkList_Length
{
public:
LinkList_Length(void);
void InitLinklist(LinkList &L);//初始化
void OutLinkList(LinkList L);//输出
int Insert_LinkList(LinkList &L);//插入
int Linklist_Len(LinkList L);//计算链表的长度
~LinkList_Length(void);
};
2.14.cpp
#include "iostream"
#include "LinkList_Length.h"
using namespace std;
int main(){
LinkList_Length locate_len;
LinkList L=NULL;
int len;//长度
locate_len.InitLinklist(L);
locate_len.Insert_LinkList(L);
locate_len.OutLinkList(L);
len=locate_len.Linklist_Len(L);
cout<<"该链表L的长度为:"<<len<<endl;
system("pause");
}