单链表的逆序

#include <iostream>
using namespace std;

typedef struct NODETYPE{
    int value;
    struct NODETYPE * next;
}NODE;

//构造链表
NODE * InitLinklist()
{
    const int SIZE = 10;

    NODE * header = new NODE;
    header->value = rand() % 100;
    NODE * cur = header;
    for(int i=1;i<SIZE;++i)
    {
        NODE * node = new NODE;
        node->value = rand()%100;
        node->next = NULL;

        cur->next = node;
        cur = node;
    }

    return header;
}


//打印链表
void printLinklist(NODE * linklist)
{
    NODE * cur = linklist;

    for(;cur;){
        cout << cur->value << " ";
        cur = cur->next;
    }
    cout << endl;
}

//迭代逆序
NODE * ReverseLinklist(NODE * linklist)
{
    NODE * cur = linklist;
    NODE * next = cur->next;
    cur->next = NULL;

    for(;next;)
    {
        NODE * next2 = next->next;

        next->next = cur;
        cur = next;
        next = next2;
    }

    return cur;
}


//递归逆序
NODE * RecursionReverseLinklist(NODE ** header,NODE * linklist)
{
    if( !linklist || !linklist->next )
    {
        *header = linklist;
        return linklist;
    }
    else
    {
        RecursionReverseLinklist(header,linklist->next)->next = linklist;

        linklist->next = NULL;
        return linklist;
    }
}

//
int main(int argc, char *argv[])
{

    NODE * linklist = NULL;

    //创建链表
    cout << "orignal linklist:" << endl;
    linklist = InitLinklist();
    printLinklist(linklist);

    //迭代逆序
    cout << "iterat reverse:" << endl;
    linklist = ReverseLinklist(linklist);
    printLinklist(  linklist );

    //递归逆序
    cout << "recursion reverse:" << endl;
    RecursionReverseLinklist(&linklist,linklist);
    printLinklist( linklist );


    cout << "end." << endl;
    return 0;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值