c 单链表反转(不添加新结点空间)
最近复习考研,加上一直都将"算法"放在很高的位置,所以,蛮重视算法的.不多说了,其实这个问题,不难理解的.
主要代码:
- //反转单链表.
- 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 单链表反转(不添加新结点空间)的更多相关文章
- Java单链表反转 详细过程
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实 ...
- java单链表反转
今天做leetcode,遇到了单链表反转.研究了半天还搞的不是太懂,先做个笔记吧 参考:http://blog.csdn.net/guyuealian/article/details/51119499 ...
- Java单链表反转图文详解
Java单链表反转图文详解 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享 背景回顾 单链表的存储结构如图: 数据域存放数据元素,指针域存放后继结点地址 我们以一条 N1 ...
- Python实现单链表数据的添加、删除、插入操作
Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...
- 经典算法(三) 单链表 反转 & 是否相交/成环 & 求交点 等
参考文章: 判断链表是否相交:http://treemanfm.iteye.com/blog/2044196 一.单链表反转 链表节点 public class Node { private int ...
- 求单链表倒数第m个结点
问题:求单链表倒数第m个结点,要求不准求链表的长度,也不许对链表进行逆转 解:设置两个指针p和q,p.q指向第一个结点.让p先移动到链表的第m个结点,然后p和q同时向后移动,直到p首先到达尾结点.此时 ...
- 单链表反转(Singly Linked Lists in Java)
单链表反转(Singly Linked Lists in Java) 博客分类: 数据结构及算法 package dsa.linkedlist; public class Node<E> ...
- java实现单链表反转(倒置)
据说单链表反转问题面试中经常问,而链表这个东西相对于数组的确稍微难想象,因此今天纪录一下单链表反转的代码. 1,先定义一个节点类. 1 public class Node { 2 int index; ...
- 单链表反转java代码
据说单链表反转问题面试中经常问,而链表这个东西相对于数组的确稍微难想象,因此今天纪录一下单链表反转的代码. 1,先定义一个节点类. public class Node { int index; Nod ...
随机推荐
- jquery 插件模版
;(function ($) { //插件的默认值属性 var defaults = { Weight: '300px', height: '230px', nextId: 'nextBtn', ne ...
- xml中的特殊符号
其实就是xml的特殊符号,因为它的配置就是xml,所以可以用下面这种写法转义 < < > > <> < ...
- FCKEditor使用说明
1.基本设置 先看看效果是什么样的: 效果图: 那么为什么说是FCKeditor的冰冷之心呢?这不是哗众取宠,主要是说它使用起来有点麻烦,下文就详细说明如何搞定这玩意儿. 1.FCKedito ...
- sql server 调优----索引缺失
SELECT mig.index_group_handle, mid.index_handle, CONVERT (decimal (28,1), migs.avg_total_user_cost * ...
- UML类图标识
矩形框:类 第一层:类名(抽象类用斜体). 第二层:属性(‘+’ 表示 public.‘-’ 表示 private.‘#’ 表示 protected). 第三层:方法. <<interfa ...
- Solr In Action 笔记(2) 之 评分机制(相似性计算)
Solr In Action 笔记(2) 之评分机制(相似性计算) 1 简述 我们对搜索引擎进行查询时候,很少会有人进行翻页操作.这就要求我们对索引的内容提取具有高度的匹配性,这就搜索引擎文档的相似性 ...
- BestCoder Round #49
呵呵哒,1001的dfs返回值写错,wa了两发就没分了,1002显然是PAM可是我没学过啊!!!压位暴力可不可以...看看范围貌似不行,弃疗...1003根本不会做,1004想了想lcc发现不可做,那 ...
- HDOJ 1056 HangOver(水题)
Problem Description How far can you make a stack of cards overhang a table? If you have one card, yo ...
- socket编程里的read和recv函数【转载】
本文转载自:http://blog.163.com/like12@126/blog/static/63023403201291983117551/ 1.read 与 recv 区别 read 原则: ...
- String的equals方法和==
String类的对象是字符串常量,一切看起来改变了String对象的操作,其实只是改变了字符串引用变量所引用的字符串罢了. Java中的字符串存放在一个公共的存储池中,引用指向存储池中相应的位置,编译 ...