您的位置:首页 > 其它

两两交换链表中的节点

2017-04-04 21:17 330 查看
问题描述:
给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例:
给出 1->2->3->4, 你应该返回的链表是 2->1->4->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) {

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

           return head;   

        ListNode *p = new ListNode(0);

        p->next = head;

        ListNode *r = p;

        while(p->next != NULL &&p->next->next != NULL){  

            ListNode *a =p->next;

            ListNode *b = p->next->next;

            a->next=b->next;  

            b->next =a;  

            p->next =b;  

            p= p->next->next;  

        } 

        return r->next; 

        // Write your code here

    }

};

个人感悟:

   不要忘记特殊情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: