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