链表的翻转实现

/*************************************************************
 * FileName: reverseLink.cpp   
 * Description: implemention for the reverse of a link
 * Author: Cui Xiaofeng
 * Date: 2008/03/22
**************************************************************
*/

#include 
< iostream >

using   namespace  std;
/* link node struct */
struct  Node
{
public:
    Node():val(
0), next(NULL)
    
{

    }

    Node(
int _val,  Node* _next):val(_val), next(_next)
    
{

    }

    friend 
class Link;
private:
    
int val;
    Node 
*next;
}
;

/* link definition */
class  Link
{
public:
    Link(Node 
*_head = NULL):head(_head)
    
{

    }

    
~Link()
    
{
        Node 
*= head, *= head;
        
while (p != NULL)
        
{
            q 
= p->next;
            delete p;
            p 
= q;
        }

    }

    Node
* CreateLink();
    Node
* ReverseLink();
    
void PrintLink();
private:
    Node 
*head;
}
;

void  Link::PrintLink()
{
    
for (Node *= head; n != NULL; n = n->next)
    
{
        cout 
<< n->val << endl;
    }

}


Node
*  Link::CreateLink()
{
    
int a[] = {023679};
    
for (int i = 0; i < sizeof(a)/sizeof(int); i++)
    
{
    
        Node 
*node = new Node(a[i], head);
        head 
= node;
    }

    
return head;
}


Node
*  Link::ReverseLink()
{
    Node 
*p, *lp, *rp;
    
    lp 
= head;
    p 
= lp->next;
    lp
->next = NULL;
    
while (p != NULL)
    
{    
        rp 
= p->next;
        p
->next = lp;    
        lp 
= p;
        p 
= rp;
    }

    head 
= lp;
    
/* the following is better, copied from others */
    
/*
    p = head;
    lp = NULL;
    rp = NULL;
    while (p != NULL)
    {
        rp = p->next;
        p->next = lp;
        lp = p;
        p = rp;
    }
    head = lp;
    
*/

    
return head;
}



int  main()
{
    Link l;
    l.CreateLink();
    l.PrintLink();
    cout 
<< "反转后:" << endl;
    l.ReverseLink();
    l.PrintLink();
    
return 0;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值