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

来源:互联网 发布:女生舍不得买衣服知乎 编辑:程序博客网 时间:2024/06/05 09:08


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了,不过交换节点的运行时间要比直接换值长一些。总的说,这道题真的很简单!


0 0
原创粉丝点击