目录
单向链表
一、初始化
/*初始化*/
void InitList(LinkList &L){
L=new LNode; //生成新结点作为头结点,用头指针L指向头结点
L->next=NULL; //头结点指向空
}
二、销毁
/*销毁*/
void DestroyList(LinkList &L){
delete [] L->next;
}
三、获取表长
/*获取链表长度*/
int ListLength(LinkList &L){
int length=0;
LNode *p=L;
while(p->next!=NULL){
p=p->next;
length++;
}
return length;
}
四、判空
/*判空*/
bool ListEmpty(LinkList &L){
if(L->next==0) return true;
else return false;
}
五、插入
/*插入*/
void ListInsert(LinkList &L,int idx,ElemType e){
LinkList p=L;
int j=0;
while(p&&j++<idx-1){
p=p->next;
}
if(!p||j>idx-1){//判断插入的idx是否和法
throw std::invalid_argument("Invalid idx");//不合法输出异常
}
LinkList q=new LNode;
q->data=e;
q->next=p->next;
p->next=q;
}
六、删除
/*删除*/
void ListDelete(LinkList &L,int idx){
LinkList p=L;
int j=0;
while(p->next&&j++<idx-1){
p=p->next;
}
if(!p||j>idx-1){//判断删除的idx是否和法
throw std::invalid_argument("Invalid idx");//不合法输出异常
}
LinkList q=p->next;
p->next=q->next;
delete q;
}
七、查找
/*查找*/
LNode *LocateElem(LinkList &L,ElemType e){
LinkList p=L->next;
while(p&&p->data!=e){
p=p->next;
}
return p;
}
八、打印
/*打印*/
void ListPrint(LinkList L)
{
LNode *p;
for(p=L->next;p;p=p->next)
cout<<p->data << (p->next ? ' ' : '\n');
}