链表反转部分结点功能的实现
发布日期:2021-08-16 15:55:37 浏览次数:13 分类:技术文章

本文共 2782 字,大约阅读时间需要 9 分钟。

#include 
#include
#include
using namespace std;struct Node{ int data; Node *next;};int tot = 0;Node *Node_Creat(){ Node *head; head = (Node *)malloc(sizeof(Node)); if(head == NULL) { printf("Overflow\n"); exit(1); } head = NULL; Node *p1,*p2; p1 = p2 = (Node *)malloc(sizeof(Node)); if(p1 == NULL || p2 == NULL) { printf("Overflow\n"); exit(1); } scanf("%d",&p1 -> data); while(p1 -> data >= 0) { tot++; if(head == NULL) { head = p1; } else { p2 -> next = p1; } p2 = p1; p1 = (Node *)malloc(sizeof(Node)); if(p1 == NULL) { printf("Overflow\n"); exit(1); } scanf("%d",&p1 -> data); } p2 -> next = NULL; return head;}void Node_Print(Node *head){ Node *p; p = head; if(p == NULL) { printf("EMPTY\n"); return ; } while(p != NULL) { printf("%d ",p -> data); p = p -> next; } printf("\n");}Node *Reverse_Node(Node *head){ Node *pPrv = NULL; Node *pNext = NULL; Node *pNow = head; Node *ReverseNode = NULL; while(pNow != NULL) { pNext = pNow -> next; if(pNext == NULL) { ReverseNode = pNow; } pNow -> next = pPrv; pPrv = pNow; pNow = pNext; } return ReverseNode;}Node * ReversePart_Node(Node *head,int start,int end){ Node *pPrv = NULL; Node *pNow = head; Node *pNext = NULL; Node *BeforeStart = NULL; //开始的结点前的结点 Node *StartNode = NULL; //开始的时候的结点 int i,j; //for循环指向需要反转的位置 for(i = 1; i <= start; i++) { if(i == start) { BeforeStart = pPrv; StartNode = pNow; } pPrv = pNow; pNow = pNow -> next; pNext = pNow -> next; } for(i = 1; i <= end - start; i++) { pNext = pNow -> next; //保存下一个 pNow -> next = pPrv; //改变指向 pPrv = pNow; //移动 pPrv和 pNow pNow = pNext; } //反转部分 未反转前的第一个结点 反转之后变成该反转部分的最后一个结点 StartNode -> next = pNow; //连接 if(BeforeStart == NULL) //从head开始反转 { head = pPrv; //pNow 反转过后是 该反转部分的第一个结点 } else { BeforeStart -> next = pPrv; //连接反转部分前面的结点 和 该反转部分 } return head;}int main(){ Node *head; head = Node_Creat(); Node_Print(head); head = Reverse_Node(head); Node_Print(head); int start,end; scanf("%d%d",&start,&end); head = ReversePart_Node(head,start,end); Node_Print(head); return 0;}

转载于:https://www.cnblogs.com/qq952693358/p/5511046.html

转载地址:https://blog.csdn.net/weixin_30810239/article/details/98605875 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:简洁的支持展开关闭的tab标签代码
下一篇:20162328蔡文琛 Bag类

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年02月29日 11时07分25秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java io流过滤流_IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流 2019-04-21
java预处理指令_Java程序员学C++_1_C++中的预处理命令 | 学步园 2019-04-21
java分词支持拼音_java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍... 2019-04-21
java中的%不对 如何处理_Java心得--异常及其处理 2019-04-21
java 上传速度计算_java常见3种文件上传速度对比和文件上传方法详细代码 2019-04-21
java 中区分月份_输入一年当中的月份,判断是哪个季节.(用java编写并且用到了import java.io.*;)... 2019-04-21
java 试图模版_图解Java设计模式之模板模式 2019-04-21
java.exe占用cpu_Windows服务器java.exe占用CPU过高问题分析及解决 2019-04-21
支付宝 java 乱码_支付宝即时到账接口中文乱码问题 2019-04-21
java中的handler理解_handler 与message的一些理解 2019-04-21
JAVA礼物题_这些Java面试题,你一定要记住! 2019-04-21
java 隐藏email_java Email 2019-04-21
linux下qt浏览word文件内容,Qt获取office文件内容 2019-04-21
amd锐龙笔记本cpu怎么样_不知不觉已经15款 AMD Ryzen锐龙笔记本处理器盘点 2019-04-21
syslog打印不带等级_(转)syslog日志等级 2019-04-21
librosa能量_librosa语音信号处理 2019-04-21
android日期选择区间控件_Android时间区间的选择 2019-04-21
lin通讯从节点同步间隔场_LIN模块介绍 2019-04-21
instantiate 卡顿严重_Unity中Instantiate实例化物体卡顿问题的解决 2019-04-21
mysql注入提取邮件_Mysql提取数据每日自动邮件通知 2019-04-21