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

主要代码:

 //反转单链表.
void
reverse(linklist lList) {
Linknode *pre = NULL; //注意该结点不能再指向别的非空结点.
Linknode *cur = lList->next;
Linknode *next;
while(cur) {
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
lList->next = pre;
}

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

完整代码:

 #include <stdio.h>
#include <malloc.h> #define FALSE 0
#define TRUE 1 typedef struct node {
int data;
struct node *next;
} Linknode; typedef Linknode *linklist; linklist
init(int); void
traverse(linklist); void
reverse(linklist); int
main(void) {
int n = ;
linklist lList = init(n);
traverse(lList);
reverse(lList);
traverse(lList);
} //根据指定结点的个数,初始化一个带有头结点的单链表.
linklist
init(int n) {
linklist lList = (linklist)malloc(sizeof(struct node)); //头结点.
lList->next = NULL; //初始时链表为空.
lList->data = n; //头结点存储总元素个数.
if(!lList) {
printf("out of memory!\n");
return FALSE;
}
int i;
Linknode * tail = lList;
for(i = ; i < n; i++) {
Linknode * nNew = (Linknode *)malloc(sizeof(struct node));
if(!nNew) {
printf("out of memory!\n");
return FALSE;
}
nNew->data = i + ; //为新结点赋值.
//重新指定尾结点.
tail->next = nNew;
tail = nNew;
nNew->next = NULL;
}
return lList;
} //遍历单链表所有结点.
void
traverse(linklist lList) {
Linknode * node;
node = lList->next; //开始时指向第一个结点.
while(node) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
return;
} //反转单链表.
void
reverse(linklist lList) {
Linknode *pre = NULL; //注意该结点不能再指向别的非空结点.
Linknode *cur = lList->next;
Linknode *next;
while(cur) {
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
lList->next = pre;
}

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

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. JS之路——常用正则表达式

    整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数 ...

  2. Instruments 使用指南

    Instruments 用户指南 http://cdn.cocimg.com/bbs/attachment/Fid_6/6_24457_90eabb4ed5b3863.pdf 原著:Apple Inc ...

  3. Android 判断当前网络连接类型

    实际应用开发时,如果存在需要用户获取大量数据的情况,最好是先判断下网络类型,提示用户当前的网络类型,是否需要连接Wifi,etc.(手机流量太贵啦,当然土豪是无视这玩意的, (/ □ \)). 定义网 ...

  4. h.264参考图像列表、解码图像缓存

    1.参考图像列表(reference picture list) 一般来说,h.264会把需要编码的图像分为三种类型:I.P.B,其中的B.P类型的图像由于采用了帧间编码的这种编码方式,而帧间编码又是 ...

  5. 对WM_NCHITTEST消息的了解+代码实例进行演示(消息产生消息,共24个枚举值)

    这个消息比较实用也很关键,它代表非显示区域命中测试.这个消息优先于所有其他的显示区域和非显示区域鼠标消息.其中lParam参数含有鼠标位置的x和y屏幕坐标,wParam 这里没有用. Windows应 ...

  6. POJ2513 Colored Sticks(欧拉)

    题目链接. 题目大意: 给很多木棍,两端被涂了颜色.任意两根木棍的相同颜色处可以拼接在一起,问有没有可能将所有的木棍都连起来,成一条直线? 分析: 考点,欧拉道路. 将一根木棍看成一条边,两端的颜色看 ...

  7. SQL SELECT INTO 语句

    SQL SELECT INTO 语句可用于创建表的备份复件. SELECT INTO 语句 SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用 ...

  8. 【5】JAVA---地址App小软件(DeletePanel.class)(表现层)

    删除地址的表现层类. 如果没有选中要删除的地址信息,会出现窗口提示: 删除地址界面:(无法修改数据,只能看) /* * DeletePanel.java * */ package cn.hncu.ad ...

  9. 关于java函数参数的修改能否带出来

    结论 1. java的8个基本类型,无论是简单类型(比如int)还是类类型(比如Integer),传到形参里的变量,在函数体内修改之后是带不出来的. 2. String类型也是带不出来的. 3. 数组 ...

  10. Java学习日记 集合

    一.接口Map<K,V>1.V put(K key, V value)2.int size()3.public class HashMap<K, V> implements M ...