单链表的逆置
来源:互联网 发布:西门子博图软件 编辑:程序博客网 时间:2024/05/22 10:22
概念:
将单链表倒序,即指针倒置,什么意思呢?就是这个意思:
其实就是原来的前驱节点变为后继节点,原来的后继节点变为前驱节点,头节点指向原来的尾节点
值得注意的是:这里的头结点的处理
实现思想:
利用头插法,将第一个节点后面的节点依次插在第一个节点之前。
方法:
- 首先要声明两个指针变量,一个为位移指针(记录当前节点),一个为置换指针(即通常所说的temp);
- 将头指针赋给位移指针,头指针置为空
- 开始循环(在位移指针不为空的情况下)
- 1:将当前的节点指针域值给置换指针
- 2:将头节点指针域的指针域值给当前节点指针域
- 3:将当前节点的地址给头节点指针域
- 4:将置换指针值给当前节点(即位移指针向后移动)
这样就完成了一个循环,就又可以循环了!
实现一个循环之后,结果是这个样子的:
每次循环之后的结果依次类推
算法代码
void Reverse(Linklist L){ Node *temp,*pre; pre = L->next; L->next = NULL; while(pre){ temp = pre->next; // 1 pre->next = L->next; // 2 L->next = pre; // 3 pre = temp; // 4 }}
完整程序代码
#include<stdio.h>#include<malloc.h>typedef struct node { int data; struct node *next; }Node,*Linklist;Linklist CreatFromTail(){ printf("请输入数字,输入'0'时结束:\n"); Linklist L; Node *s; int x; L=(Linklist)malloc(sizeof(Node)); L->next=NULL; while(1) { scanf("%d",&x); if(x!=0) { s=(Node *)malloc(sizeof(Node)); s->data=x; s->next=L->next; L->next=s; } else { break; } } return L;}void Output(Linklist L){ Node *p; p=L->next; while(p) { printf("%d ",p->data); p=p->next; } printf("\n");}void Reverse(Linklist L){ Node *temp,*pre; pre = L->next; L->next = NULL; while(pre){ temp = pre->next; pre->next = L->next; L->next = pre; pre = temp; }}int main(){ Linklist L; L=CreatFromTail();//创建单链表 Output(L);//打印输出单链表 Reverse(L);//逆置单链表 Output(L); //输出逆置之后的链表 Reverse(L); //再次逆置 Output(L); //再次输出逆置之后的结果}
0 0
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 地道美语听力播客 4
- DPCM
- zTree插件setting配置详解
- cocos2dx输出Log的几种方法
- spring boot 事务的一些实践
- 单链表的逆置
- windows下安装xgboost for python 的简单方法
- 微服务:分解应用以实现可部署性和可扩展性
- scrapy User Agent切换的两种方法
- jack server
- 动态规划:0-1背包问题
- Android入门(简介)
- js 对象
- 归并排序