本题是一个非常经典的题目:单链表逆转。

这是链表结点的定义:

typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */

先给出实现的代码:

List Reverse( List L )
{
List before = NULL, head = L, next;
while(head != NULL)
{
next = head->Next; // 记录当前值的下一个值
head->Next = before; // 修改当前结点的下一个为上个结点
before = head; // 上一个结点修改为本结点
head = next; // 当前结点为下一个结点
}
return before;
};

代码的思想很简单,就是我们需要将每个结点的指针改变过来。

当我们从前往后将当前结点的指针指向前一个的时候,我们不可避免的就需要至少三个指针:

  1. 之前结点的指针
  2. 当前结点的指针
  3. 下一个结点的指针

注意在这个过程中,我们如果修改了当前结点指向的下一个结点的位置,那么我们必然就找不到之前这个结点的下一个结点。

所以我们需要保存下一个结点,以免修改当前结点指向的下一个指针之后找不到下一个结点的位置了。

最新文章

  1. Linux~centos上安装.netcore,HelloWorld归来!
  2. HDU 1828 Picture(线段树扫描线求周长)
  3. Android百分比布局支持库介绍——com.android.support:percent(转)
  4. Bootstrap的学习以及简单运用
  5. C/C++类型转换总结
  6. myEclipse下安装SVN插件
  7. (转)Salesforce的440亿美金并购宣告企业软件市场进入3.0互联网化时代
  8. xml约束DTD演示
  9. SAS软件的使用和统计学分析的初步介绍
  10. android78 Fragment和Activity 传递数据
  11. MediaPlayer+SurfaceView 视频播放 示例
  12. 安装notepad++之后怎样在鼠标右键上加上Edit with notepad++
  13. javascript (九)注释
  14. C#中的DataSet添加DataTable问题
  15. JavaBean--删除操作
  16. Intent的属性及Intent-filter配置——指定Action、Category调用系统Activity
  17. JavaScript入门之Canvas(一): 2D Context
  18. rsync 同步文件如何指定属主属组和权限
  19. LinkedHashMap 实现总结
  20. 如何在C#中引入CPLEX的dll(CPLEX系列-教程一)

热门文章

  1. js 实现简单的选项卡
  2. js 图片实现无缝滚动
  3. ajax5
  4. Ubuntu下实现歌词解析
  5. Linux进程间通信-eventfd
  6. 面向对象第三单元博客(JML)
  7. mysql字段数据类型、设置严格模式
  8. 新手版超详细LoadRunner12完整安装+汉化过程
  9. 优秀DevOps工程师必会的33个面试题
  10. 浅尝Go语言GC