leetcode之24. Swap Nodes in Pairs(C++实现&链表实现和整体测试)

题目:
Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
***************************我是分割线************************************

struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class linkedlist
{
public:
    linkedlist(): head(nullptr) {};
    ~linkedlist();
    void inserts(int val);
    ListNode* swapPairs(ListNode* head);
    void prints();
//private:

    ListNode *head;

};


void linkedlist::prints()
{
    if(head==nullptr)
    {
        cout<<"The Linkedlist is empty"<<endl;
        return ;
    }
    cout<<head->val;
    ListNode * heads=head->next;

    while(heads)
    {
        cout<<"  ->  "<<heads->val;
        heads=heads->next;
    }
    cout<<endl;
}


ListNode* linkedlist::swapPairs(ListNode* head)
{
    if(!head || !head->next) return head;

    ListNode* temp;
    ListNode* new_head;

    //change num1 & num2
    ListNode* p1=head;
    ListNode* p2=head->next;
    p1->next=p2->next;
    p2->next=p1;
    head=p2;

    ListNode* p=head->next;

    while(p->next && p->next->next)
    {

        //init
        temp=p->next;
        new_head=temp->next;

        p->next=new_head;
        temp->next=new_head->next;
        new_head->next=temp;

        //update p
        p=temp;
    }

    return head;
}

void linkedlist::inserts(int val)
{
    if(nullptr==head)
    {
        head=new ListNode(val);
    }
    else
    {
        ListNode *heads =  head;
        while(heads->next)
        {
            heads=heads->next;
        }
        heads->next=new ListNode(val);
    }
    cout<<"insert success!"<<endl;
    return ;
}


int main()
{
    linkedlist* s = new linkedlist();
    s->prints();
    s->inserts(1);
    s->inserts(2);
    s->inserts(3);
    s->inserts(4);
    s->inserts(5);
    s->prints();
    s->head=s->swapPairs(s->head);
    s->prints();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值