leetcode Swap Nodes in Pairs

来源:互联网 发布:c 语言主要应用领域 编辑:程序博客网 时间:2024/05/22 00:40

两两交换节点,如下

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

我的思路是每次处理2个,即1和2交换完后,再对3和4操作。

注意点:如果3和4交换了,那么此时1应该指向4而不是3,即要加入plast

可能在末尾仅剩1个,即无需再交换,需要加if(pright==NULL) break;

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */struct ListNode* swapPairs(struct ListNode* head) {    struct ListNode *pleft,*pright,*new_head,*plast;    if(head==NULL||head->next==NULL)  //若无节点或仅一个节点,直接返回        return head;    pleft=head;     //左节点    new_head=pleft->next; //新头节点一定是左节点的下一个    plast=NULL;  //刚开始没有上一个节点,置为NULL    while(pleft!=NULL)    {        pright=pleft->next; //右节点        if(pright==NULL)  //如果右节点为空,说明到尾了,退出            break;                    //否则开始交换操作        if(plast!=NULL)              plast->next=pright;   //如果发生交换,那么上一节点一定会指向右节点        pleft->next=pright->next;  //左节点指向右节点的下一个        pright->next=pleft;    //右节点指向左节点        //交换操作结束                        plast=pleft; //设置上一节点        pleft=pleft->next; //开始处理后面2个    }    return new_head;}


0 0
原创粉丝点击