<强> 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语言数据结构链接链表反转的实现