【题目】

输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。

【非递归】

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
listnode *Reverse_Iteratively(listnode *head)
{
    // prev <-cur  next->...->null
    listnode *prev = NULL;
    listnode *cur = head;
    listnode *next = NULL;
    while(cur != NULL)
    {
        next = cur->next;
        cur->next = prev;
        // update prev and cur
        prev = cur ;
        cur = next;
    }
    return prev;
}

【递归】

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
listnode *Reverse_Recursively(listnode *head)
{
    Reverse(NULL, head, NULL);
}

listnode *Reverse(listnode *prev, listnode *cur, listnode *next)
{
    if (cur == NULL)
        return prev;
    next = cur->next;
    cur->next = prev;
    prev = cur;
    cur = next;
    return Reverse(prev, cur, next);
}

【参考】

http://zhedahht.blog.163.com/blog/static/2541117420073471124487/

19.递归法和非递归法反转链表[ReverseLinkedList]的更多相关文章

  1. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  2. 【剑指offer】递归循环两种方式反转链表

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/25737023 本文分别用非递归和递归两种方式实现了链表的反转,在九度OJ上AC. 题目描写 ...

  3. 【Weiss】【第03章】练习3.11:比较单链表递归与非递归查找元素

    [练习3.11] 编写查找一个单链表特定元素的程序.分别用递归和非递归实现,并比较它们的运行时间. 链表必须达到多大才能使得使用递归的程序崩溃? Answer: 实现都是比较容易的,但是实际上查找链表 ...

  4. 二叉树3种递归和非递归遍历(Java)

    import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...

  5. 简单迷宫算法(递归与非递归C++实现)

    假定迷宫如下:1代表墙,0代表道路,起点在(1,1),终点(11,9)(PS:下标从0开始计算). 现在寻求一条路径能从起点到达终点(非最短). 有两种解法:递归与非递归. 递归算法思路: 要用递归, ...

  6. 回溯算法 DFS深度优先搜索 (递归与非递归实现)

    回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 基本思想 将n元问题P的状态空间E表示成 ...

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

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

  8. 扩展欧几里德算法(递归及非递归实现c++版)

    今天终于弄懂了扩展欧几里德算法,有了自己的理解,觉得很神奇,就想着写一篇博客. 在介绍扩展欧几里德算法之前,我们先来回顾一下欧几里德算法. 欧几里德算法(辗转相除法): 辗转相除法求最大公约数,高中就 ...

  9. C语言实现 二分查找数组中的Key值(递归和非递归)

    基本问题:使用二分查找的方式,对数组内的值进行匹配,如果成功,返回其下标,否则返回 -1.请使用递归和非递归两种方法说明. 非递归代码如下: #include <stdio.h> int ...

随机推荐

  1. IntellJ IDEA 所有快捷键

    登录下面网站. http://www.jetbrains.com/idea/documentation/ 下载Keymap for Windows/Linux 后面的PDF文档.

  2. 什么是POJO?

    本文转载自百度文库,详细出处请参考: http://wenku.baidu.com/view/4a9ad533ee06eff9aef80765.html 我认为写的很准确,很抱歉没有找到作者的名字! ...

  3. 【HDU 2160】母猪的故事

    题 Description 话说现在猪肉价格这么贵,著名的ACBoy 0068 也开始了养猪生活.说来也奇怪,他养的猪一出生第二天开始就能每天中午生一只小猪,而且生下来的竟然都是母猪. 不过光生小猪也 ...

  4. Spring的拦截器

    <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>or ...

  5. 洛谷P1156 垃圾陷阱

    动规仍然是难关啊 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想 ...

  6. 深入解析MySQL分区(Partition)功能

    自5.1开始对分区(Partition)有支持 = 水平分区(根据列属性按行分)= 举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录. === 水平分区 ...

  7. MyEclipse------如何在特定目录下创建文件夹

    Directory.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  8. Fedora下安装ORACLE 11g

    一.硬件检测 1.内存检测  oracle11g要求最低1GB内存 命令: grep MemTotal  /proc/meninfo 2.交换空间检测 通常交换空间是内存1.5倍 命令: grep   ...

  9. iOS exit(0); 直接退出程序

    exit();

  10. 突破XSS字符数量限制执行任意JS代码

    一.综述 有些XSS漏洞由于字符数量有限制而没法有效的利用,只能弹出一个对话框来YY,本文主要讨论如何突破字符数量的限制进行有效的利用,这里对有效利用的定义是可以不受限制执行任意JS.对于跨站师们来说 ...