链表逆序的原理及实例
http://blog.csdn.net/wangqing_12345/article/details/51757294
typedef struct node {
int data;
struct node *next;
}node_t, *pnode_t;
要求将一带链表头List head的单向链表逆序。
分析:
1). 若链表为空或只有一个元素,则直接返回;
2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;
3). 重复2),直到q为空
4). 调整链表头和链表尾
示例:以逆序A->B->C->D为例,图示如下
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define LEN 10
- typedef struct node {
- int data;
- struct node *pnext;
- } node_t, *pnode_t;
- pnode_t create_link()
- {
- int i;
- pnode_t phead;
- phead = (pnode_t)malloc(sizeof(node_t));
- if (phead == NULL) {
- printf("malloc fail.\n");
- exit(-1);
- }
- memset(phead, 0, sizeof(node_t));
- pnode_t ptail = phead;
- for (i = 0; i < LEN; i++) {
- pnode_t pnew = (pnode_t)malloc(sizeof(node_t));
- if (pnew == NULL) {
- printf("malloc fail.\n");
- exit(-1);
- }
- memset(pnew, 0, sizeof(node_t));
- pnew->data = i+1;
- pnew->pnext = NULL;
- ptail->pnext = pnew;
- ptail = pnew;
- }
- return phead;
- }
- void print_link(pnode_t phead)
- {
- pnode_t p = phead->pnext;
- while (p != NULL) {
- printf("%d ", p->data);
- p = p->pnext;
- }
- printf("\n");
- }
- void reverse_link(pnode_t phead)
- {
- pnode_t p, q, ptmp;
- p = phead->pnext;
- q = phead->pnext->pnext;
- ptmp = NULL;
- while (q != NULL) {
- ptmp = q->pnext;
- q->pnext = p;
- p = q;
- q = ptmp;
- }
- phead->pnext->pnext = NULL;
- phead->pnext = p;
- }
- int main(int argc, char *argv[])
- {
- pnode_t phead = NULL;
- phead = create_link();
- print_link(phead);
- reverse_link(phead);
- print_link(phead);
- return 0;
- }
链表逆序的原理及实例相关推荐
- c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例
单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序.本文就分别实例讲述一下两种方法.具体如下: 1.逆序输出 实例代码如下: #include #include #inc ...
- c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出
C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...
- 链表详解(单链表、双向链表、链表逆序)
目录 线性表 顺序存储结构 链式存储结构 单链表 单链表定义 单链表基本操作(仅供参考) 实例 循环单链表的状态图 双向链表 双向链表定义 双向链表特点 双向链表基本操作(仅供参考) 实例 双向链表的 ...
- c语言实现单链表逆序算法,C语言解字符串逆序和单向链表逆序问题的代码示例...
字符串逆序上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了.字符串逆序比较简单,直接上代码: void stringReverse(char* p1,char* p2) { ...
- 链表逆序(反转链表)
链表逆序(反转链表) 一道很基础的算法题,做一下思路的分享和代码的实现,也算是自己学习的一份笔记,如有不正,请大佬们指正. class ListNode {int val;ListNode next; ...
- c语言实现链表的逆序输出,C语言数据结构实现链表逆序并输出
C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...
- c语言递归链表逆序,链表逆序的递归实现
链表逆序是个很基础的算法,考察的是指针操作和基本数据结构.常规的写法当然是OK的,不过要是还会写出一个递归的链表逆序算法,那别人肯定要给你点个赞了. 1 问题描述 给定一个链表,请将其逆序.即如果链表 ...
- C语言的单链表逆序和指定范围逆序
文章目录 前言 逆序 指定范围逆序 源码实现 前言 关于链表的逆置,是考察对链表指针的理解.知道了如何不实用额外空间,同时使用O(n)复杂度对链表进行逆序之后将会对链表有好理解. 同时关于如何在指定范 ...
- 单链表逆序生成及逆置的完整实现
单链表逆序生成及逆置的完整实现 本例中单链表数据类型定义成int型,可更改 头文件1(1.h) 宏定义及Status类型定义 头文件2(2.h) 单链表基本操作函数与逆置函数 include" ...
最新文章
- python logging模块的作用_Python 日志模块logging分析及使用-2
- 计算机网络实验(思科模拟器Cisco Packet Tracer)——交换机配置以及虚拟局域网VLAN
- JMX的Hello World
- 我为什么“放弃”从事八年的嵌入式领域
- 初识函数式编程(Functional Programming,FP)
- MS SQL Server 2000 游标的使用方法
- c语言:新颖的进制灵活应用
- paip.svn服务服务器安装配置
- frida-trace入门
- 邮箱服务器如何配置?POP和IMAP如何定义?
- 再见,可视化!你好,Pandas!
- centos7 AMOEBA读写分离配置
- pdf转换成jpg python_Python Wand将PDF转换为JPG background
- 万国觉醒服务器维护,《万国觉醒》怎么换服 更换服务器方法攻略
- 数据化运营17 留存:如何通过数据、社交、内容手段提升用户留存?
- SQLmap-tamper详细介绍
- 能转16进制的计算机软件,16进制计算器能否完成各种不同进制的转换?
- Linux系统高树攀登之路
- 蓝旭前端第二周预习———HTML标签+如何查看控制台
- LINGO实例,优化问题1
热门文章
- HBase MapReduce
- iPhone UITableViewCell如何滚动到视图顶端。
- [2013-08-19] nohup的使用
- ellen 纽奥良大学演讲
- aix java home_java程序员工作日子一(java_home 配置)
- java批量提取文件夹名称_bat 批量提取指定目录下的文件名
- mysql有实例名这个概念,MySQL的一些概念笔记
- 链式存储mysql_链栈:栈的链式存储结构
- mysql教程目录_MySql目录(二)
- java.util.scanner sc_关于Java的Scanner的问题,菜鸟求各大神解答