设单链表及链栈S的结构定义如下:
typedefstructnode
{DataTypedata;
structnode*next;
}linkstack;
编写一个算法voidReverseIJist(linkstack*head),借助于栈S将带头结点单链表head中序号为奇数的结点逆置,序号为偶数的结点保持不变。(例如:单链表的逻辑结构为(a1,a2,a3,a4,a5,a6),逆置后变为(a5,a2,a3,a4,a1,a6))。说明:栈的初始化运算用InitStack(S);进栈运算用Push(S,x);判栈空运算用EmptyStack(S);出栈运算用Pop(S);取栈顶元素运算用Gettop(S)。
void ReverseList(1inkstack木head) {linkstack*S; DataType x; InitStack(S); P=head一>next; while(P!=NULL) {X=P一>data; Push(S,X); if(P一>net==NULL) P=P一>next; else P=P一>next一>next; } P=head一>next; while(!EmptyStack(S)) {x=Gettop(S); P一>data=x; Pop(S); if(P一>next==NULL) P=P一>next; else P=P一>next一>next; } }