当前位置: 首页 > news >正文

单链表的逆转

  这次做的是单链表的逆转,采用的方法比较笨,是一趟趟到头,然后逆转一个,然后再重新趟一趟,再逆转下一个,最后出了一个疏忽,就是逆转到最后一个节点(即开始被逆转链表的第一个节点)的时候,最后一个节点的next指向的其实还是倒数第二个节点(这是未逆转时的情况,这里没有改变它),然后倒数第二个节点经过逆转后指向的节点是倒数第一个,所以这里就形成了一个闭环,当输出的时候会死循环。

     情况大致如此,给以后遇到同样问题的盆友一个借鉴,说不定会有点·帮助,最后贴上数据结构和函数代码:

typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;

 


List Reverse( List L ){


// 通过一次次的遍历来做
// 需要逆转后的头结点、两个浮动结点、计数器
//判断是否为空,为空的话直接返回NULL
if(!L)
return L;

//不为空的话则进行以下操作
//初始化计数器
int num = 1;

//定义结点和浮动结点
List L1,L2,L3;

//初始化原链表的浮动结点
L3 = L;

//先找到原先的尾节点
while(L3->Next){
//如果L的下一个结点不为空,那么继续循环
L3 = L3->Next;
num++;
}


//循环结束以后,num为单链表长度
//初始化头结点和浮动结点
L1 = L3;
L2 = L3;


//此时已经逆转了一个节点,故num--
num--;

//进行循环赋值
for(;num>0;num--){
//只要num还有值长度,就继续循环
// 每次循环逆转一个节点

//重新初始化原链表浮动结点
L3 = L;
for(int i = 1;i<num;i++){
//每次循环往后移一位
L3 = L3->Next;
}

//循环结束后移到了最后的还没逆转的一位
//逆转链表拓展一位
L2->Next = L3;
L2 = L2->Next;
}

//此时最后一个节点的尾指针并未指空,而是指向的倒数第二个节点
// 而倒数第二个节点指向的是最后一个节点,当输出的时候这里会形成死循环
// 所以要把最后一个节点的下一个指针置空
L2->Next = NULL;

//循环结束,逆转完成
return L1;

}

转载于:https://www.cnblogs.com/nmblog/p/10993665.html

相关文章:

  • 坑爹的 Java 可变参数,把我整得够惨。。
  • day25-2 random,os,sys模块
  • 文件传输协议介绍
  • 前端开发者必备的 Nginx 知识
  • WebSocket Client连接AspNetCore SignalR Json Hub
  • 精读vue-hooks
  • 扩展SpringMVC以支持更精准的数据绑定1
  • 如何安装部署秋色园QBlog站点
  • Myeclipse优化配置
  • 转换流、缓冲流、流的操作规律
  • TypeScript 学习总结 函数 接口 (二)
  • javaweb期末项目-stage3-项目测试和发布
  • RabbitMQ安装配置-01
  • JDBC详解
  • 浏览器缓存与pageshow监听掉坑
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • css布局,左右固定中间自适应实现
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • javascript 哈希表
  • JavaScript 一些 DOM 的知识点
  • Java程序员幽默爆笑锦集
  • Java的Interrupt与线程中断
  • laravel5.5 视图共享数据
  • php面试题 汇集2
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Python十分钟制作属于你自己的个性logo
  • underscore源码剖析之整体架构
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 每天10道Java面试题,跟我走,offer有!
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 因为阿里,他们成了“杭漂”
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 2017年360最后一道编程题
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​渐进式Web应用PWA的未来
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #Linux(权限管理)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (Forward) Music Player: From UI Proposal to Code
  • (十六)Flask之蓝图
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四) Graphivz 颜色选择
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • ./configure,make,make install的作用
  • .NET MVC之AOP
  • .net MySql
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net各种迷惑命名解释
  • .NET开源快速、强大、免费的电子表格组件
  • //解决validator验证插件多个name相同只验证第一的问题