C语言数据结构链接链表反转的实现

  

<强> C语言数据结构链接链表反转的实现

  

链表反转,示例如下:
  

  

偶数个输入:→b→c→d→e→f
  偶数个输出:e→f→c→d→→b
  或
  奇数个输入:a→→→c d, e, f, g
  e偶数个输出:g→→→f c→d→→b
  

        # include & lt; stdio.h>   # include & lt; malloc.h>   # include & lt; stdlib.h>/* * * * * * * * * * * * * *栈开始* * * * * * * * * * * * */#定义STACK_SIZE 1024      字符栈(STACK_SIZE);   int顶级=0;      空推(char ch) {   堆栈(顶级)=ch;   前+ +;   }      char pop () {   前,   返回栈(高级);   }      int isempty () {   返回0==最高;   }      空白test_stack () {   推动(' a ');   推动(b);   推动(' c ');   推动(' d ');      而(! isempty ()) {   printf(“流行ch: % c \ n”, pop ());   }   }/* * * * * * * * * * * * * *栈结束* * * * * * * * * * * * */struct _node {   char数据;   struct _node *下;   };      typedef struct _node节点,*叮铃声;         叮铃声init_link () {   叮铃声pl;   pl=(叮铃声)malloc (sizeof(节点));//检查malloc成功与否   如果(NULL==pl) {   printf (“malloc内存失败…”);   返回NULL;   }//初始化连接头   pl→数据=' https://www.yisu.com/0 ';   pl→下=零;      返回pl;   }      空白input_data(叮铃声pl, char数据){   叮铃声p=pl;      而(p→下一){   p=p→下;   }      叮铃声节点=零;   节点=(叮铃声)malloc (sizeof(节点));//malloc一个新节点//添加数据   如果(零!=节点){   节点→数据=https://www.yisu.com/zixun/data;   未来=p ->下一个节点->;//最后一个下一个是NULL   p -> next=节点;   p=节点;//p点最后一个节点   }   }      空白output_link(叮铃声pl) {   如果(NULL==pl) {   printf("叮铃声是零”);   返回;   }      叮铃声p=pl→下;//已经检查pl是空的,这是好的   而(零!=p) {   printf (" % c→“p→数据);   p=p→下;   }   printf (" \ n \ n ");   }//把和流行堆栈   叮铃声revert_link2(叮铃声pl) {   叮铃声p=pl;      而(p→下一){//printf (" p→数据:% c \ n, p→下一步→数据);   如果(p→下一步→下){   推动(p→下一步→下一步→数据);   推动(p→下一步→数据);   p=p→下一步→下;   其他}{   推动(p→下一步→数据);   p=p→下;   }   }      而(! isempty ()) {   printf (" % c→”,pop ());   }      printf (" \ n \ n ");      返回NULL;   }            叮铃声revert_link(叮铃声pl) {   如果(NULL==pl){//检查链接为空   返回NULL;   }      int link_len=0;   叮铃声tmp_pl=pl→下;      而(tmp_pl){//链接数   link_len + +;   tmp_pl=tmp_pl→下;   }//链接长度不超过两个节点(s)   如果(link_len & lt;=2) {   返回pl;   }//链接长度超过两个节点   返回revert_link2 (pl);   }               int main () {   叮铃声pl=零;      pl=init_link ();//初始化连接头      input_data (pl a);//添加数据   input_data (pl, b);   input_data (pl、“c”);   input_data (pl ' d ');   input_data (pl,“e”);   input_data (pl, ' f ');   input_data (pl,‘g’);      output_link (pl);      叮铃声pl2=revert_link (pl);      output_link (pl2);      返回0;   }/* * * *   revert_link.c         linux gcc编译   gcc revert_link。c - o revert_link,,。/revert_link         输出结果:      一个→b→c→d→e→f→g   g→e→f→c→d→一个→b      或      一个→b→c→d→e→f   e→f→c→d→一个→b         * * * */之前      

间隔螺旋反转:
  

  

输入:→b→c→d→e→f
  输出:b→一个→d→c→f→e
  

        叮铃声revert_link3(叮铃声pl) {   如果(NULL==pl) {   printf("叮铃声是零”);   返回NULL;   }      叮铃声p=pl;   叮铃声第一次=p→下;   而(零!=){   叮铃声第二=第一→下;   如果(零!=秒){   第一个→下=第二→下;//第三个节点   第二个→下=第一;//恢复两个节点   第一=?   p→下=第二;   p=第二→下;   }   }   返回pl;   }      

C语言数据结构链接链表反转的实现