Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head) {
if(head==NULL) return NULL;
if(head->next==NULL) return head;
struct ListNode *ptr1=head,*ptr2=head->next,*lptr,*rptr;
rptr=ptr2->next;
ptr2->next=ptr1;
head=ptr2;
lptr=ptr1;
while((ptr1=rptr)!=NULL&&(ptr2=ptr1->next)!=NULL)
{
rptr=ptr2->next;
ptr2->next=ptr1;
lptr->next=ptr2;
lptr=ptr1;
}
if(ptr1==NULL) lptr->next=NULL;
else lptr->next=ptr1;
return head;
}