设线性表A=(a1,a2,a3,…,an)以带头结点的单链表作为存储结构。编写一个函数,对A进行调整,使得当n为奇数时A=(a2,a4,…,an-1,a1,a3,…,an),当n为偶数时A=(a2,a4,…,an,a1,a3,…,an-1)。
参考答案:方法一:
void f(LinkList L)
{
LinkList p,q,r;
p=L;∥*P是偶数尾结点
q=L—>next;∥*q是当前奇数结点
while(q&&q—>next)∥尚有未调整的偶数结点
{
r=q—>next;∥r指向当前偶数结点
q—>next=r—next;∥删除偶数结点
r—>next=P—>next。
P—>next=r; ∥插入偶数结点
p=p—>next;
q=q—>next;
}
}
方法二:
void f(LinkList L)
{
LinkList p,h,r,s;
if(!L—>next ‖!L—>next—>next)return;
h=L—>next;
r=h;∥h和r分别为奇数结点的头、尾指针
L—>next=h—>next;
p=L—>next;∥p指向偶数结点
while(p—>next)∥2个结点以上
{
s=p—>next;∥s指向奇数结点
p—>next=s—>next;∥删除奇数结点
r—>next=s;∥链接奇数结点
r=s:
if(p—>next)
p=p—>next;∥尚有偶数结点存在
}
p—>next=h;
r—>next=NULL;
}
方法三:
void f(LinkList L)
{
LinkList p,h,rl,r2,s;
if(!L—>next ‖!L—next—>next)return;
h=L—>next;∥h是奇数结点头指针
r2=h;∥r2是奇数尾结点指针
r1=L;∥r1是偶数结点指针
p=h—>next;∥p指向第1个偶数结点
while(p)
{
s=p—>next;∥s指向下一个奇数结点
r1—>next=P;
r1=P;∥链接偶数结点
if(s)
{
p=s—>next;∥p指向下一个偶数结点
r2—>next=s:
r2=s;∥链接奇数结点
}
else p=s;∥偶数个数情况
}
r1—>next=h:
r2—>next=NULL:
}