您的位置:首页 > 其它

lintcode——两两交换链表中的节点

2017-03-26 23:30 323 查看


1.题目
  给一个链表,两两交换其中的节点,然后返回交换后的链表。
   给出
1->2->3->4
, 你应该返回的链表是
2->1->4->3

2.思路

  一开始看到这个题就在纠结到底是两两交换节点还是只交换值,因为觉得交换值更简单就直接上手了。

首先考虑判断空链表;然后考虑链表非空的情况,因为要两两交换值,不能忘了判断head->next非空,对每一对节点,中间使用临时存放值的变量:p下一个的值给临时变量,p的值给p的下一个,临时变量给p,这样就完成了一对数交换;然后p下移,循环上一对节点值交换的思路。

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)

        { return head;}

        ListNode *p=head;

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

        {

            int T;

            T=p->next->val;

            p->next->val=p->val;

            p->val=T;

            p=p->next->next;

        }

            return head;

       

    }

};
4.感想

 感觉交换值没多大技术含量,其实交换节点也挺简单的,再增加两个指针,类似交换值一样循环一圈完成每对的交换就ok了,不过交换节点的运行时间要比直接换值长一些。总的说,这道题真的很简单!


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