1.问题描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。
2.思路:例如给定链表1->2->3->4应返回2->1->4->3
应该定义一个n来储存当前节点的数据域,再把它下一个节点的数据域赋值给当前节点,n赋值给下一个节点的数据域,这样就可以交换两个节点,完成后再让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
ListNode *p=head;
while(p!=NULL&&p->next!=NULL)
{
int n;
n=p->val;
p->val=p->next->val;
p->next->val=n;
p=p->next->next;
}return head;
}
};
4.感想:要注意引进n来存储节点的数据域!并且完成头两个节点的交换后,要p=p->next->next!这样才是两两交换节点,不会重复!!