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

链表反转,示例如下:
偶数个输入:a->b->c->d->e->f
偶数个输出:e->f->c->d->a->b
or
奇数个输入:a->b->c->d->e->f->g
偶数个输出:g->e->f->c->d->a->b
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
/************** start of stack *************/
#define STACK_SIZE 1024
char stack[STACK_SIZE];
int top = 0;
void push(char ch){
stack[top] = ch;
top++;
}
char pop(){
top--;
return stack[top];
}
int isempty(){
return 0 == top;
}
void test_stack(){
push('a');
push('b');
push('c');
push('d');
while(!isempty()){
printf("pop ch: %c\n", pop());
}
}
/************** end of stack *************/
struct _node{
char data;
struct _node *next;
};
typedef struct _node node, *plink;
plink init_link(){
plink pl;
pl = (plink)malloc(sizeof(node));
// check malloc success or not
if(NULL == pl) {
printf("malloc memory fail...");
return NULL;
}
// init link head
pl->data = '\0';
pl->next = NULL;
return pl;
}
void input_data(plink pl, char data){
plink p = pl;
while(p->next){
p = p->next;
}
plink node = NULL;
node = (plink)malloc(sizeof(node)); // malloc a new node
// add data
if(NULL != node){
node->data = data;
node->next = p->next; // last next is NULL
p->next = node;
p = node; // p point last node
}
}
void output_link(plink pl){
if(NULL == pl){
printf("plink is null");
return;
}
plink p = pl->next; // already check pl is NULL, so here is ok
while(NULL != p){
printf("%c -> ", p->data);
p = p->next;
}
printf("\n\n");
}
// push and pop stack
plink revert_link2(plink pl){
plink p = pl;
while(p->next){
// printf("p->data: %c\n", p->next->data);
if(p->next->next){
push(p->next->next->data);
push(p->next->data);
p = p->next->next;
} else {
push(p->next->data);
p = p->next;
}
}
while(!isempty()){
printf("%c -> ", pop());
}
printf("\n\n");
return NULL;
}
plink revert_link(plink pl){
if(NULL == pl){ // check link is NULL
return NULL;
}
int link_len = 0;
plink tmp_pl = pl->next;
while(tmp_pl){ // count link count
link_len++;
tmp_pl = tmp_pl->next;
}
// link length is no more than two node(s)
if(link_len <= 2){
return pl;
}
// link length is more than two nodes
return revert_link2(pl);
}
int main(){
plink pl = NULL;
pl = init_link(); // init link head
input_data(pl, 'a'); // add data
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);
plink pl2 = revert_link(pl);
output_link(pl2);
return 0;
}
/****
revert_link.c
linux gcc compile
gcc revert_link.c -o revert_link && ./revert_link
output result:
a -> b -> c -> d -> e -> f -> g
g -> e -> f -> c -> d -> a -> b
or
a -> b -> c -> d -> e -> f
e -> f -> c -> d -> a -> b
****/
间隔螺旋反转:
输入: a -> b -> c -> d -> e -> f
输出: b -> a -> d -> c -> f -> e
plink revert_link3(plink pl){
if(NULL == pl){
printf("plink is null");
return NULL;
}
plink p = pl;
plink first = p->next;
while(NULL != first){
plink second = first->next;
if(NULL != second){
first->next = second->next; // third node
second->next = first; // revert two nodes
first = first->next;
p->next = second;
p = second->next;
}
}
return pl;
}
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# link
# 链表反转
# C语言实现
# 链表反转的实例
# 使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)的方法
# C语言实现单链表反转
# C语言递归实现字符串逆序的方式详解
# C语言面试C++字符串替换空格示例
# C语言每日练习之字符串反转
# 链表
# 如有
# 数据结构
# 希望能
# 谢谢大家
# 数个
# 疑问请
# void
# top
# ch
# push
# char
# STACK_SIZE
# int
# struct
# printf
# data
# _node
# return
# pop
相关文章:
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何通过西部数码建站助手快速创建专业网站?
如何配置FTP站点权限与安全设置?
香港网站服务器数量如何影响SEO优化效果?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
如何获取免费开源的自助建站系统源码?
如何快速生成专业多端适配建站电话?
长沙企业网站制作哪家好,长沙水业集团官方网站?
建站之星24小时客服电话如何获取?
外贸公司网站制作哪家好,maersk船公司官网?
网站制作公司排行榜,四大门户网站排名?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
如何做网站制作流程,*游戏网站怎么搭建?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
如何快速上传自定义模板至建站之星?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
如何获取上海专业网站定制建站电话?
制作宣传网站的软件,小红书可以宣传网站吗?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
网站制作公司排行榜,抖音怎样做个人官方网站
南平网站制作公司,2025年南平市事业单位报名时间?
黑客入侵网站服务器的常见手法有哪些?
,南京靠谱的征婚网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
制作表格网站有哪些,线上表格怎么弄?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
建站之星价格显示格式升级,你的预算足够吗?
建站之星如何快速更换网站模板?
建站主机与服务器功能差异如何区分?
想学网站制作怎么学,建立一个网站要花费多少?
如何做静态网页,sublimetext3.0制作静态网页?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
香港服务器部署网站为何提示未备案?
如何配置IIS站点权限与局域网访问?
如何在IIS中新建站点并配置端口与IP地址?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何选购建站域名与空间?自助平台全解析
建站主机空间推荐 高性价比配置与快速部署方案解析
湖北网站制作公司有哪些,湖北清能集团官网?
如何快速搭建高效香港服务器网站?
红河网站制作公司,红河事业单位身份证如何上传?
如何选择高效可靠的多用户建站源码资源?
安徽网站建设与外贸建站服务专业定制方案
如何有效防御Web建站篡改攻击?
建站之星好吗?新手能否轻松上手建站?
专业网站建设制作报价,网页设计制作要考什么证?
如何在阿里云部署织梦网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。