//10.2-7 O(n)非递归逆转单向链表的n个元素。
#include<stdio.h>
#include<stdlib.h>
typedef struct NODE{
char key;struct NODE* next;
}NODE;
NODE *L=NULL;
void insert(NODE* p)
{//插入到头结点
p->next=L;
L=p;
}
NODE* createnode(char key)
{
NODE*p=(NODE*)malloc(sizeof(NODE));
if(!p){
puts("memory exhausted.");exit(1);
}
p->key=key;
return p;
}
void traverse()
{
NODE*p;
for(p=L;p;p=p->next)
putchar(p->key);
putchar('\n');
}
void inverse()//删除原来头结点的下一个结点,再插入到最前。
{
if(!L) return ;
NODE*still=L,*p;
while(p=still->next){
still->next=p->next;
p->next=L;L=p;
}
}
int main(void)
{
insert(createnode('z'));
insert(createnode('y'));
insert(createnode('x'));
insert(createnode('w'));
traverse();inverse();
traverse();inverse();
traverse();
return 0;
}