单链表反转的三种方法

news/2024/7/7 19:12:20

Talk is cheap, show your code!


struct Node
{
    int data;
    Node* m_pNext;
    Node(int d):data(d){m_pNext = NULL;}
};

1. 从前遍历到尾,依次反转指针的指向,原来的头指针的下一结点设置为空,原来的尾结点变成头结点返回。

Node* Reverse(Node*& head)
{
    if(head ==  NULL)
    {
        return head;
    }

    Node* pre = NULL;
    Node* cur = head;
    Node* nex;

    while(cur)
    {
        nex = cur->m_pNext;
        cur->m_pNext = pre;
        pre = cur;
        cur = nex;
    }


    return head = pre;
}


2. 设置一个新的空链表,然后每次从原来的链表中取出最前面的元素,插入到这个新的链表之中,直到最后一个元素。

Node* Reverse2(Node*& head)
{
    if (head == NULL) return head;

    Node* pList = NULL; // 新的空链表。
    Node* cur = head;

    while(cur)
    {
        Node* Tmp = cur->m_pNext;
        cur->m_pNext = pList;
        pList = cur;
        cur = Tmp;
    }
    return head = pList;
}


3. 采用递归。

Node* Reverse3(Node* head)
{
    if (head == NULL || head->m_pNext == NULL)
        return head;

    Node* p = Reverse3(head->m_pNext);
    head->m_pNext->m_pNext = head;
    head->m_pNext = NULL;

    return p;
}

这种递归的方式,需要注意的是,执行完后head不再有用。



http://www.niftyadmin.cn/n/3652956.html

相关文章

使用libevent编写Linux服务

本文转自:http://blog.chinaunix.net/uid-25885064-id-3399488.html 我在此代表广大网友对原作者表示感谢。 -------------------下面是正文--------------------------- 一、初始化事件 首先完成对libenvent的事件初始化和事件驱动模型的选择。在使用多线程的情…

[收藏] Linux中系统服务/守护进程 (daemon) 的详细说明

.mytd {font:Verdana; font-size:9pt;}acpidacpid(Advanced Configuration and Power Interface)是为替代传统的APM电源管理标准而推出的新型电源管理标准。通常笔记本电脑需要启动电源进行管理。alsasoundAlsa声卡驱动守护程序。Alsa声卡驱动程序本来是…

用Google的gflags优雅的解析命令行参数

写了这么多年的Linux下C/C代码,一直使用getopt_long来解析命令行参数,同时定义一个全局的struct来保存各个命令行参数的值。虽然用得比较“繁琐”,但也安于现状。最近突然发现了Google早在多年前就开源了一个解析命令行参数的“神器”gflags。…

Apache的ANT Project的主页访问的时候总是出现问题,还是把它的镜像站点记下来的好!

输入http://ant.apache.org,99.99999...%会看到下面这个东西,郁闷ing... - -|||原本的官方下载地址:http://ant.apache.org/bindownload.cgi,也不是100%能够正常访问!还是用下面几个镜像网站吧,也是官方推荐…

打造Windows环境中的VI编辑器环境!

有句话说得好:曲不离口,拳不离手!!! 要想用好VI,还是从平时积累开始吧!可是在公司上班,在家里的时候,大部分还是在Windows平台上,得找些对应的工具...去了趟 …

虚拟机安装centos7后出现的问题

虚拟机安装centos7后出现的问题1. 安装完后无法使用ifconifg,也无法使用yum解决方法:http://blog.csdn.net/qq_31382921/article/details/52174626vim /etc/sysconfig/network-scripts/ifcfg-enp0s3 中 进入编辑模式,将 ONBOOTno 改为 ONBOOTyes&#xf…

安装远程桌面,VNC Server on FreeBSD + VNC Viewer on Windows !

一直都在思考*NIX下面如何远程桌面,发现VNC实在是一个很好的东东,在*NIX平台上的性能表现远超过于Windows平台上面!下面就以FreeBSD为例子来说明如何建立Remote Desktop:1) FreeBSD X-Window(xorg) Gnome Desktop VNCServer2) …