递归法:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* first=head;
ListNode* second=head->next;
first->next=swapPairs(second->next);//注意顺序别弄反
second->next=first;//注意顺序别弄反
return second;
}
};
迭代法:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummy=new ListNode(0);
dummy->next=head;
ListNode* prevNode=dummy;
while(head!=NULL&&head->next!=NULL)//注意是&&,如果是||的还会报空指针的错误
{
ListNode* first=head;
ListNode* second=head->next;
//修改next,节点交换------------------------------------------
prevNode->next=second;
first->next=second->next;//注意不能写成first->next=second->next->next,因为不确定second->next是否是空指针,这时候prevNode的作用就显现出来了
second->next=first;
//更迭---------------------------------------
prevNode=first;
head=first->next;
}
return dummy->next;
}
};