您的位置:首页 > 其它

两两交换链表中的节点

2017-03-30 17:28 302 查看
问题描述:

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

样例

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

解题思路:建立两个相邻的指针h1,h2,一个在前一个在后,临时数值t保存h1的元素,完成相邻元素的交换。
代码实现:
/**

 * 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 

        ListNode *h1=head;

        ListNode *h2=h1->next;

        if(h1==NULL) return NULL;

        while(h1!=NULL&&h2!=NULL){

            int t=h1->val;

            h1->val=h2->val;

            h2->val=t;//交换元素;

            if(h2->next==NULL) break;//链表中只剩下一个元素时,跳出循环;

            h1=h2->next;//否则h1移到h2的前面;

            if(h1->next==NULL) break;//到达链表尾部时,跳出循环;

            h2=h1->next;//否则h2移到移动后的h1的前面;

        }

        return head;    

        }

    };

解题感悟:
指针的位置移动是难点,判断链表指针是否到达链表尾部和指针的位置变换要写正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表