算法 链表相邻元素翻转

链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g。

关键是在于相邻的两个指针的交换过程。

#include <iostream>


using namespace std;

typedef struct _NodeL
{
    int _data;
    _NodeL *_next;
} NodeL;

NodeL* swapNode(NodeL* &p, NodeL* pPreLeft)
{
    NodeL* pTmp = NULL;
    NodeL* pLeft = NULL;
    NodeL* pRight = NULL;

    if ((p!= NULL) && (p->_next != NULL))
    {
        pLeft = p;
        pRight = p->_next;

        if (pPreLeft!= NULL)
        {
            pPreLeft->_next = pRight;
        }

        pLeft->_next = pRight->_next;
        pRight->_next = pLeft;

        p = pRight;
    }

    return pLeft;
}

void main()
{
    int Test[] = {1,2,3,4,5,6,7,8};
    int i = 0;
    NodeL* Header = NULL;
    NodeL* pNew = NULL;
    NodeL* pTail = NULL;

    for (i=0;i<8;i++)
    {
        pNew = new NodeL();
        pNew->_data = Test[i];
        pNew->_next = NULL;

        if (i == 0)
        {
            Header = pNew;
            pTail = pNew;
        }
        else
        {
            pTail->_next = pNew;
            pTail = pTail->_next;
        }
    }

    pTail = Header;
    while(pTail!=NULL)
    {
        cout << pTail->_data << ",  ";
        pTail = pTail->_next;
    }

    pTail = Header;
    while(pTail!=NULL)
    {
        if (pTail == Header)
        {
            swapNode(pTail, NULL);
            Header = pTail;
            pTail = Header->_next;
        }
        else
        {
            pTail = swapNode(pTail->_next, pTail);
        }
    }

    cout << endl;

    pTail = Header;
    while(pTail!=NULL)
    {
        cout << pTail->_data << ",  ";
        pTail = pTail->_next;
    }

    cin>>i;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值