/*************线性表单链表存储结构
typedef struct LNode {
ElemType data; //数据域
struct *next; //指针域
}LNode, *LinkList;
//查看链表中第i个元素,用e返回其值
Status GetElem_L( LinkList L, int i, ElemType &e ){
p = L->next; j = 1; //初始化p指向第一个结点,j为计数器;
while ( p&&j<i ){
p = p->next ; j++;
}
if ( !p || j>i)return ERROR;
e = p->data;
return OK;
}//GetElem_L
//在带头结点的单链表中第i个位置之前插入数据元素e
Status ListInsert_L( LinkList &L ,int i, ElemType e ) {
p = L; j = 0; //初始化p指向头结点,j为该结点的位序
while( p && j<i-1 ){ p = p->next; j++; } //找到第i - 1个结点
if( !p || j>i-1 )return ERROR; //i <1或者i大于表长加1;
s = ( LinkList )malloc( sizeof( LNode ) };
if( s==NULL )return ERROR;
s->data = e; s->next = p->next; //插入L中
p ->next = s;
return OK;
}//ListInsert_L
//在带头结点的单链表L中删除第 i 个元素,并且由e返回其值
Status ListDelete_L ( LinkList &L ,int i, ElemType e ) {
p = L; j = 0; //初始化p指向头结点,j为该结点的位序
while( p && j<i-1 ){ p = p->next; j++; } //找到第i - 1个结点
if( !(p->next) || j>i-1 )return ERROR; //i <1或者i大于表长加1,删除位置不合理;
q = p->next; p->next = p->next;
e = q->data; free( q ); //删除并释放结点
return OK;
}//ListDelete_L
//逆序输入n个元素的值,建立带表头结点的单链表L
void CreateList_L( LinkList &L, int n) {
L = (LinkList )malloc( sizeof( LNode );
L->next = NULL; //先建立一个带头结点的单链表
for ( i = n; i>0; i-- ){
p = ( LinkList )malloc ( sizeof (LNode ));
scanf( &p->data );
p->next = L->next; L->next = p;
}
}//CreateList_L
//已知单链表LA和LB按值非递减排列(从小到大)
//归并LA和LB到LC也按值非递减排列
void MergeList_L( LinkList &La, LinkList &Lb, LinkList &Lc ){
pa = La->next;pb = Lb->next;
Lc = pc = La; //用La的头结点作为Lc的头结点
while ( pa && pb ){
if( pa->data>=pa->data ){
pc->next = pa;
pc = pa;
pa = pa->next;
}
else{
pc->next = pb;
pc = pb;
pa = pb->next;
}
pc->next = pa ? pa:pb;
free( Lb );
}//MergeList_L