最近复习考研,加上一直都将"算法"放在很高的位置,所以,蛮重视算法的.不多说了,其实这个问题,不难理解的.

主要代码:

  1. //反转单链表.
  2. void
  3. reverse(linklist lList) {
  4. Linknode *pre = NULL; //注意该结点不能再指向别的非空结点.
  5. Linknode *cur = lList->next;
  6. Linknode *next;
  7. while(cur) {
  8. next = cur->next;
  9. cur->next = pre;
  10. pre = cur;
  11. cur = next;
  12. }
  13. lList->next = pre;
  14. }

  我最近发现,算法这东西,光靠空想是很痛苦,很难理解的,我建议各位不懂的时候,多用笔,在纸上画图,对于数字型,同样是有效的.

完整代码:

  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. #define FALSE 0
  5. #define TRUE 1
  6.  
  7. typedef struct node {
  8. int data;
  9. struct node *next;
  10. } Linknode;
  11.  
  12. typedef Linknode *linklist;
  13.  
  14. linklist
  15. init(int);
  16.  
  17. void
  18. traverse(linklist);
  19.  
  20. void
  21. reverse(linklist);
  22.  
  23. int
  24. main(void) {
  25. int n = ;
  26. linklist lList = init(n);
  27. traverse(lList);
  28. reverse(lList);
  29. traverse(lList);
  30. }
  31.  
  32. //根据指定结点的个数,初始化一个带有头结点的单链表.
  33. linklist
  34. init(int n) {
  35. linklist lList = (linklist)malloc(sizeof(struct node)); //头结点.
  36. lList->next = NULL; //初始时链表为空.
  37. lList->data = n; //头结点存储总元素个数.
  38. if(!lList) {
  39. printf("out of memory!\n");
  40. return FALSE;
  41. }
  42. int i;
  43. Linknode * tail = lList;
  44. for(i = ; i < n; i++) {
  45. Linknode * nNew = (Linknode *)malloc(sizeof(struct node));
  46. if(!nNew) {
  47. printf("out of memory!\n");
  48. return FALSE;
  49. }
  50. nNew->data = i + ; //为新结点赋值.
  51. //重新指定尾结点.
  52. tail->next = nNew;
  53. tail = nNew;
  54. nNew->next = NULL;
  55. }
  56. return lList;
  57. }
  58.  
  59. //遍历单链表所有结点.
  60. void
  61. traverse(linklist lList) {
  62. Linknode * node;
  63. node = lList->next; //开始时指向第一个结点.
  64. while(node) {
  65. printf("%d ", node->data);
  66. node = node->next;
  67. }
  68. printf("\n");
  69. return;
  70. }
  71.  
  72. //反转单链表.
  73. void
  74. reverse(linklist lList) {
  75. Linknode *pre = NULL; //注意该结点不能再指向别的非空结点.
  76. Linknode *cur = lList->next;
  77. Linknode *next;
  78. while(cur) {
  79. next = cur->next;
  80. cur->next = pre;
  81. pre = cur;
  82. cur = next;
  83. }
  84. lList->next = pre;
  85. }

我网上搜了一下,有蛮多人写的,我这里就写一种方法就行了,至于开辟新节点空间的方式,我觉得是小儿科的.

c 单链表反转(不添加新结点空间)的更多相关文章

  1. Java单链表反转 详细过程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实 ...

  2. java单链表反转

    今天做leetcode,遇到了单链表反转.研究了半天还搞的不是太懂,先做个笔记吧 参考:http://blog.csdn.net/guyuealian/article/details/51119499 ...

  3. Java单链表反转图文详解

    Java单链表反转图文详解 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享 背景回顾 单链表的存储结构如图: 数据域存放数据元素,指针域存放后继结点地址 我们以一条 N1 ...

  4. Python实现单链表数据的添加、删除、插入操作

    Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...

  5. 经典算法(三) 单链表 反转 & 是否相交/成环 & 求交点 等

    参考文章: 判断链表是否相交:http://treemanfm.iteye.com/blog/2044196 一.单链表反转 链表节点 public class Node { private int ...

  6. 求单链表倒数第m个结点

    问题:求单链表倒数第m个结点,要求不准求链表的长度,也不许对链表进行逆转 解:设置两个指针p和q,p.q指向第一个结点.让p先移动到链表的第m个结点,然后p和q同时向后移动,直到p首先到达尾结点.此时 ...

  7. 单链表反转(Singly Linked Lists in Java)

    单链表反转(Singly Linked Lists in Java) 博客分类: 数据结构及算法   package dsa.linkedlist; public class Node<E> ...

  8. java实现单链表反转(倒置)

    据说单链表反转问题面试中经常问,而链表这个东西相对于数组的确稍微难想象,因此今天纪录一下单链表反转的代码. 1,先定义一个节点类. 1 public class Node { 2 int index; ...

  9. 单链表反转java代码

    据说单链表反转问题面试中经常问,而链表这个东西相对于数组的确稍微难想象,因此今天纪录一下单链表反转的代码. 1,先定义一个节点类. public class Node { int index; Nod ...

随机推荐

  1. jquery 插件模版

    ;(function ($) { //插件的默认值属性 var defaults = { Weight: '300px', height: '230px', nextId: 'nextBtn', ne ...

  2. xml中的特殊符号

    其实就是xml的特殊符号,因为它的配置就是xml,所以可以用下面这种写法转义 <          <     >          >      <>   < ...

  3. FCKEditor使用说明

    1.基本设置   先看看效果是什么样的:   效果图: 那么为什么说是FCKeditor的冰冷之心呢?这不是哗众取宠,主要是说它使用起来有点麻烦,下文就详细说明如何搞定这玩意儿. 1.FCKedito ...

  4. sql server 调优----索引缺失

    SELECT mig.index_group_handle, mid.index_handle, CONVERT (decimal (28,1), migs.avg_total_user_cost * ...

  5. UML类图标识

    矩形框:类 第一层:类名(抽象类用斜体). 第二层:属性(‘+’ 表示 public.‘-’ 表示 private.‘#’ 表示 protected). 第三层:方法. <<interfa ...

  6. Solr In Action 笔记(2) 之 评分机制(相似性计算)

    Solr In Action 笔记(2) 之评分机制(相似性计算) 1 简述 我们对搜索引擎进行查询时候,很少会有人进行翻页操作.这就要求我们对索引的内容提取具有高度的匹配性,这就搜索引擎文档的相似性 ...

  7. BestCoder Round #49

    呵呵哒,1001的dfs返回值写错,wa了两发就没分了,1002显然是PAM可是我没学过啊!!!压位暴力可不可以...看看范围貌似不行,弃疗...1003根本不会做,1004想了想lcc发现不可做,那 ...

  8. HDOJ 1056 HangOver(水题)

    Problem Description How far can you make a stack of cards overhang a table? If you have one card, yo ...

  9. socket编程里的read和recv函数【转载】

    本文转载自:http://blog.163.com/like12@126/blog/static/63023403201291983117551/ 1.read 与 recv 区别 read 原则: ...

  10. String的equals方法和==

    String类的对象是字符串常量,一切看起来改变了String对象的操作,其实只是改变了字符串引用变量所引用的字符串罢了. Java中的字符串存放在一个公共的存储池中,引用指向存储池中相应的位置,编译 ...