1.问题描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。
2.思路:两两交换两个节点数据域所存放的数据元素
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 *temp=head;
while(temp!=NULL&&temp->next!=NULL)
{
int m=temp->next->val;
temp->next->val=temp->val;
temp->val=m;
temp=temp->next->next;
}
return head;
}
};
4.感想:刚开始的时候自己一直希望通过改指针指向来改变两个节点的顺序,自己的代码自己用画链表图来验证也是没错,但一直是Wrong answer,最后发现应该是在链表的最后的地方代码运行会有错误。别人给我讲了另一种思路,就是每次交换两个节点的数据域的数据元素,这种思想更简单,代码在实行起来也更简单。在编写程序时,不同的角度看待问题有不同的解决方法。