链表就地逆置
来源:互联网 发布:网络变压器内部结构 编辑:程序博客网 时间:2024/04/18 11:45
- 前言
- 算法思路
- Ubuntu 下的运行结果
- 源代码
前言
对于这个链表的就地逆置算法感觉比较绕!今天就彻底的消灭了他。现将总结如下。
就地逆置,就是在不借助任何中间变量的情况下,逆置一单链表。
算法思路:
逆置后的点链表初始为空,表中的节点不是新生成的,而是从原链表当中一次“删 除”,再逐个头插到逆置表中。设逆置链表的初始态为空表,“删除”已知链表中 的第一个节点,然后将它“插入”到逆置链表的“表头”,即使得他成为逆置链表 中“新”的第一个节点,如此循环,直至原链表为空。
假设有如下数据结构:
#define ElemType char typedef struct Node{ ElemType data; struct Node *next; }Node,*LinkList;
算法原理如下图所示
核心算法
void ReverseList(LinkList L){ Node *p,*q; p = L->next; /*p为原链表的当前处理节点*/ L->next = NULL; /*逆置单链表初始为空*/ while(p != NULL){ /*当原链表未处理完*/ q = p->next; /*q指针保留原链表当前处理节点的下一个节点*/ p->next = L->next; /*将当前处理节点p插入到逆置L的表头*/ L->next = p; p = q; /*p指向下一个待插入的节点*/ } }
其实也比较简单;就是有点绕。这里同时给出头插法建立链表的代码
void CreatList(LinkList L){ Node *s; char c; int flag = 1; while(flag){ c = getchar(); if(c != '$'){ s = (Node*)malloc(sizeof(Node)); s->data = c; s->next = L->next; L->next = s; }else flag = 0; } }
Ubuntu 下的运行结果
源代码
#include <stdio.h>#include <stdlib.h>#include <string.h>#define ElemType chartypedef struct Node{ ElemType data; struct Node *next;}Node,*LinkList;void InitList(LinkList *L);void ReverseList(LinkList L);void CreatList(LinkList L);void Print(LinkList L);int main(){ LinkList L; InitList(&L); CreatList(L); Print(L); ReverseList(L); Print(L); return 0;}void InitList(LinkList *L){ *L = ( LinkList )malloc(sizeof(Node)); (*L)->next = NULL;}void CreatList(LinkList L){ Node *s; char c; int flag = 1; while(flag){ c = getchar(); if(c != '$'){ s = (Node*)malloc(sizeof(Node)); s->data = c; s->next = L->next; L->next = s; }else flag = 0; }}void Print(LinkList L){ Node *r; r = L->next; while(r != NULL){ printf("%3c",r->data); r = r->next; } printf("\n\n");}void ReverseList(LinkList L){ Node *p,*q; p = L->next; L->next = NULL; while(p != NULL){ q = p->next; p->next = L->next; L->next = p; p = q; }}
0 0
- 链表就地逆置
- 链表就地逆置
- 链表就地逆置
- 链表就地逆置
- 链表的就地逆置
- 单向循环链表就地逆置
- 24. 链表就地逆置
- 链表就地逆置和合并
- 线性表---就地逆置
- 实验二、3链表的就地逆置
- 24.链表操作,单链表就地逆置
- Q24、(链表):链表操作,单链表就地逆置
- 双向循环链表(插入,删除,就地逆置)
- 链表的就地逆置(递归+非递归)
- 24 单链表就地逆置,合并链表
- DS之链表实现就地逆置
- 链表之带头结点的单链表就地逆置
- 线性表的就地逆置
- packageinstaller之权限获取及展现
- Tomcat connector元素常用配置(最大连接数等)
- Apache负载均衡+Tomcat集群
- Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式
- 错误:No resource found that matches the given name 'Theme.AppCompat.Light'解决方法
- 链表就地逆置
- git理解和使用
- Tomcat中的Connector配备
- Tomcat处理HTTP请求:Connector源码
- gevent wsgi 部署bottle配置实例
- ACE_Reactor(六)ACE_TP_Reactor
- Android 项目实践(四)——服务器搭建
- lwip【6】LWIP使用经验
- Python I/O 笔记