题目:给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例
给出 1->2->3->4
, 你应该返回的链表是 2->1->4->3
。
思路:两两交换节点乍一看好像就是交换两个节点的位置,仔细想一想交换的是数值,两个一组两个一组,只要head->next不是NULL,或者head不是NULL就可以交换俩个节点的值,head节点再移动两个位进行下一次条件的判断。中间值得注意的是,要提前把交换的值记录下来,不要交换的时候丢失。下面看一下具体的代码。
代码:
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 *dummy=new ListNode(0);
dummy->next=head;
while(head!=NULL&&head->next!=NULL)
{
int s=head->val;
head->val=head->next->val;
head->next->val=s;
head=head->next->next;
}
return dummy->next;
}
};
感想:这个题思路上并不难,写代码的时候重点在于认真仔细。这个虽然简单,但并不是一下子就能写对,思考还是有不足的地方。期待自己的进步。