单链表的创建与逆置
Status ListCreate_L(LinkList &L,int n)
{
LNode *rearPtr,*curPtr; //一个尾指针,一个指向新节点的指针
L=(LNode*)malloc(sizeof (LNode));
if(!L)exit(OVERFLOW);
L->next=NULL; //先建立一个带头结点的单链表
rearPtr=L; //初始时头结点为尾节点,rearPtr指向尾巴节点
for (int i=1;i<=n;i++){ //每次循环都开辟一个新节点,并把新节点拼到尾节点后
curPtr=(LNode*)malloc(sizeof(LNode));//生成新结点
if(!curPtr)exit(OVERFLOW);
scanf("%d",&curPtr->data);//输入元素值
curPtr->next=NULL; //最后一个节点的next赋空
rearPtr->next=curPtr;
rearPtr=curPtr;
}
return OK;
}
void ListReverse_L(LinkList &L)
{
LinkList p,q,s;
p=L->next;
q=p->next; //q指向第一个结点
p->next=NULL;
while(q!=NULL)
{
s=q->next;
q->next=L->next;
L->next=q;
q=s;//使后续的每一个节点都插入到队头实现逆序过程
}
}
顺序表的创建和逆置
Status ListCreate_Sq(SqList &L)
{
scanf("%d",&L.length);
L.elem=(ElemType *)malloc(L.length*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);
for(int i=0;i<L.length;i++)
scanf("%d",&L.elem[i]);
return OK;
}
void ListReverse_Sq(SqList &L)
{
int i,j;
ElemType t;
for(i=0,j=L.length-1; i<j; i++,j--)
{
t=L.elem[i];
L.elem[i]=L.elem[j];
L.elem[j]=t;
}
}