/**
* 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 *ph=head, *pl=head->next, *pp=NULL;
ListNode* pt=NULL;
ListNode* result = pl;
while(pl->next != NULL){
if(pp == NULL){
pp = ph;
pt = pl->next;
pl->next = ph;
ph->next = pt;
ph = ph->next;
if(pl->next->next->next != NULL)
pl = pl->next->next->next;
else{
return result;
}
}
else{
pp->next = ph->next;
pt = pl->next;
pl->next = ph;
ph->next = pt;
ph = ph->next;
if(pl->next->next->next != NULL)
pl = pl->next->next->next;
else
return result;
pp = pp->next->next;
}
}
if(pp != NULL){
pt = pp->next;
pp->next = ph->next;
pl->next = pt;
ph->next = NULL;
}
else{
pl->next = ph;
ph->next = NULL;
}
return result;
}
};
要考虑ph和pl交换后其相对位置也发生变化,要考虑尾部情况,要考虑交换时链表元素为奇数情况。