链表逆序的原理及实例
来源:互联网 发布:开源 数据上报 编辑:程序博客网 时间:2024/06/06 10:24
设链表节点为
typedef struct node {
int data;
struct node *next;
}node_t, *pnode_t;
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;
- }
0 0
- 链表逆序的原理及实例
- 链表的创建及逆序
- 单向链表的基本操作及逆序实现
- 链表的逆序
- 链表的逆序
- 链表的逆序
- 链表的逆序
- 链表的逆序
- 链表的逆序
- BlazeDS的功能原理及配置实例
- json的使用原理及实例
- 霍夫变换的原理及实例
- WebService的工作原理及实例
- 触发器原理及实例
- Ajax实例及原理
- ContentProvider原理及实例
- 多线程原理及实例
- ContentProvider原理及实例 .
- 实习杂记(25):MarginStart和MarginLeft
- Java千百问_01基本概念(014)_同步、异步有什么区别
- PCLint error 1566 解决方法
- String为啥为final
- MediaRecoder实现预览画面
- 链表逆序的原理及实例
- 【OpenCV】OpenCV的图像绘制功能
- [Leetcode刷题]Missing Ranges
- 在外部js文件中获取web工程名
- Mac OSX下Sublime Text配置使用Ctags实现代码跳转
- 如何使用QQ分享,各种分享
- 素数判断中的一些自己的小问题 break
- 一位过来人给 90 后创业者的 5 个建议
- js 时间运算,时间加减