复习一下链表反转

分别用递归的方法和非递归的方法实现。

链表反转中通过借助辅助參数,能够用两个指针完毕反转 Node* Reverse2Point(List* head)

#include <stdio.h>
#include <malloc.h>typedef int ElemType;
typedef struct Node {int data;struct Node* next;
}Node, *List;
//用数组arr来初始化链表中数据;此例中链表无头点
int InitList(List *list, ElemType* arr, int num)
{int i= 0;Node* tail_node; Node* tmp_node;*list =(List)malloc(sizeof(Node));if(NULL == *list)return;(*list)->data = arr[i];(*list)->next = NULL;tail_node = *list;for(i = 1; i < num; i++) {tmp_node = (Node*)malloc(sizeof(Node));if(NULL == tmp_node)return;tmp_node->data = arr[i];tmp_node->next = NULL;tail_node->next = tmp_node;tail_node = tmp_node; }
}   void TraveseList(List list)
{Node* tmp_node;if(NULL == list)return;tmp_node = list;while(tmp_node) {printf("%d ", tmp_node->data);tmp_node = tmp_node->next;}printf("\n");
}void ReverseList(List* list)
{Node* p_pre = NULL;Node* p_cur = NULL;Node* p_nxt = NULL;if(NULL == list)return;p_cur = (*list)->next;p_pre = *list;p_pre->next = NULL;while(p_cur) {p_nxt = p_cur->next;p_cur->next = p_pre;p_pre = p_cur;p_cur = p_nxt;}*list = p_pre;
}Node* Reverse2Point(List* head)
{Node* p_cur = NULL;Node* p_nxt = NULL;if(NULL == *head)return;p_cur = (*head)->next;(*head)->next = NULL;while(p_cur) {p_nxt = p_cur->next;p_cur->next = *head;*head = p_cur;p_cur = p_nxt;}
}
//递归实现反转,返回反转后的链表头
//原理同上述非递归方法。反转当前节点和该节点的指针(反转前分别保存当前节点和该节点的下一个节点。以便完毕兴许节点同样的操作--通过递归完毕)
Node* Reverse(Node* p_cur, Node* p_pre)
{if(NULL == p_cur->next) {p_cur->next = p_pre;return p_cur;}else {Node *p_nxt = p_cur->next;p_cur->next = p_pre;Reverse(p_nxt, p_cur);}
}int main()
{List head;Node* tmp;int array[] = {3, 5, 7, 8, 2};InitList(&head, array, 5);TraveseList(head);printf("reverse list:");ReverseList(&head);TraveseList(head);printf("reverse list:");head = Reverse(head, NULL);TraveseList(head);printf("reverse list:");Reverse2Point(&head);TraveseList(head);return 0;
}

链表反转(递归与非递归实现)相关推荐

  1. 单链表反转(递归和非递归)

    单链表反转有递归和非递归两种算法. 下面定义节点 [cpp] view plaincopy typedef struct ListNode{ int value; ListNode* next; }L ...

  2. 逆置单链表——递归与非递归

    文章目录 前言 方式一:非递归 原理 图解 实现代码 方式二:递归 原理 图解 实现代码 完整实现 代码 运行结果 前言 单链表的逆置图解 方式一:非递归 原理 非递归逆置单链表的本质是创建一个新的链 ...

  3. java 反转二叉树 非递归_【刷算法】翻转二叉树的递归和非递归解法

    题目描述 操作给定的二叉树,将其变翻转为源二叉树的镜像. 输入描述: 1 1 / \ / \ 2 3 ------> 3 2 / \ / \ / \ / \ 4 5 6 7 7 6 5 4 解题 ...

  4. 二叉树的遍历(递归,非递归,Morris)

    二叉树的遍历 目录 递归遍历 非递归遍历 Morris遍历 1. 递归遍历 递归版遍历只要当前节点不为null,就可以三次回到当前节点. public static void preOrderRecu ...

  5. python创建树结构、求深度_数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)...

    前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...

  6. 全排列(含递归和非递归的解法)

    全排列在近几年各大网络公司的笔试中出现的比较频繁 首先来看看题目是如何要求的(百度迅雷校招笔试题). 用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, ...

  7. 全排列(递归与非递归实现)

    全排列问题在公司笔试的时候非经常见,这里介绍其递归与非递归实现. 递归算法 1.算法简述 简单地说:就是第一个数分别以后面的数进行交换 E.g:E = (a , b , c),则 prem(E)= a ...

  8. 【二叉树的遍历-3】后序遍历(递归与非递归)

    [二叉树的遍历-1]前序遍历(递归与非递归) [二叉树的遍历-2]中序遍历(递归与非递归) [二叉树的遍历-4]层序遍历(递归与非递归) 后序遍历 后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历 ...

  9. 二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现

    二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现 提示:今天开始,系列二叉树的重磅基础知识和大厂高频面试题就要出炉了,咱们慢慢捋清楚! 文章目录 二叉树,二叉树的归先序遍历,中序遍历, ...

  10. 二叉树的遍历(递归与非递归实现)

    二叉树的遍历(递归与非递归实现) 二叉树的实现(三叉链表的形式) public class XieChaoThreeLinkBinTree<E> {public static class ...

最新文章

  1. 你想要的生信知识全在这——生信宝典目录 (181202)
  2. vue 给iframe设置src_vue项目iframe的传值问题
  3. python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...
  4. 南京理工大学计算机学院教师信息网,南京理工大学教师信息
  5. 转:关于Apache与Nginx的优势比较(经典)
  6. Homography拓展(含与平面法向量相关的情况)
  7. Mipmap与纹理过滤
  8. 美化 PowerShell
  9. 六西格玛dfss_实施六西格玛设计(DFSS)的主要工具有哪些?
  10. 精灵图在线测量,自动生成想要图片的宽高及位置
  11. Matlab中图像剪裁命令——imcrop()
  12. 哈工大SCIR十篇长文被EMNLP 2022主会及子刊录用
  13. dst发育筛查有意义吗_Dst发育筛查是什么?
  14. WebRTC回声抵消模块简要分析
  15. [创业] 美国互联网广告07年总开支255亿美元, 增长27%
  16. 使用java开发阿里云OSS开放云存储服务
  17. windows 7 共享文件夹
  18. Studio 3T 破解教程
  19. 6.824 raft lab 2A 2B实验分析
  20. 让DuiLib支持Icon图片显示

热门文章

  1. 给JDK设置tmp目录的办法
  2. jar的MANIFEST.MF配置了Class-Path, java -classpath设置无效
  3. 全网首发:JProfiler11运行时找不到库的解决办法
  4. 荒唐可笑的文言文编程语言
  5. VC使用命令行编译很复杂
  6. 吾以为,最适合入门的语言是Java
  7. 汝把公司搞死了,不批汝批谁?
  8. 机械表加智能表,双表成为富人标配
  9. 研发做好了,产品不一定能卖掉;研发做不好,没东西可卖
  10. 实现模拟内存动态分区分配算法_你还在为了JVM而烦恼么?(内存结构和垃圾回收算法)...