编写算法Reverse(LinkList &L),要求借助于栈将一个带头结点的单链表L逆置。其中栈的初始化操作、入栈操作和出栈操作算法名分别为InitStack(&S)、Push(&S,e)、Pop(&S,&e)。
注意:new你也可以用malloc delete就换成free
cpp
typedef int ElemType;
typedef struct SNODE
{
ElemType data;
struct SNODE* next;
}SNODE, * LinkStack;
void InitStack(LinkStack& l)
{
l = new SNODE;
l->next = nullptr;
}
void push(LinkStack& l, ElemType x)
{
LinkStack p = new SNODE;
p->data = x;
p->next = l->next;
l->next = p;
}
void pop(LinkStack& l,ElemType& e)
{
if (!l->next) return;
LinkStack p = l->next; e = p->data;
LinkStack q = p->next;
l->next=q;
delete p;
}
int empty(LinkStack& l)
{
if (l->next == nullptr) return 1;
else return 0;
}
typedef struct s {
ElemType data; // 数据域
struct s* next; // 指针域
} LNode, * LinkList;
void Reverse(LinkList& l)
{
LinkList p = l->next;
LinkList r = l;
LinkStack s;
int e;
InitStack(s);
while (p)
{
push(s, p->data);
p = p->next;
}
while (!empty(s))
{
pop(s, e);
LinkList q = new LNode;
q->data = e;
q->next = nullptr;
r->next = q;
r = q;
}
}