您的位置:首页 > 其它

两两交换链表中的节点

2017-03-30 16:29 232 查看
1.问题描述

给一个链表,两两交换其中的节点,然后返回交换后的链表。

样例

给出 
1->2->3->4
, 你应该返回的链表是 
2->1->4->3


2.解题思路

两两交换节点,就是把节点的指针交换,要注意到当节点为头指针和空节点时要单独处理。

3.代码实现

/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     ListNode *next;

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

 * };

 */

class Solution {

public:

    /**

     * @param head a ListNode

     * @return a ListNode

     */

    ListNode* swapPairs(ListNode* head) {

        // Write your code here

        if(head==NULL||head->next==NULL) 

        return head;

         ListNode *p=head,*q=head->next,*k=head;

        while(q!=NULL) 

           {

           p->next=q->next;

            q->next=p;

             if(p!=head)  

              k->next=q;

            if(p==head)  head=q;

            k=p;

            p=p->next;

            if(p!=NULL)

            q=p->next;

            else  q=NULL;

         }

         return head;

               }

};

4。感想

注意头指针和空节点时特殊节点,交换时要单独判断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: