Given a linked list, swap every two adjacent nodes and return its head.
Example:
Given1->2->3->4
, you should return the list as2->1->4->3
.
Note:
- Your algorithm should use only constant extra space.
- You may not modify the values in the list's nodes, only nodes itself may be changed.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head) {
if(head==NULL||head->next==NULL)
return head;
struct ListNode *hhead=(struct ListNode *)malloc(sizeof(struct ListNode));
hhead->next=head;
struct ListNode *l1,*l2,*p;
p=hhead;
l1=p->next;
l2=l1->next;
while(l1!=NULL&&l2!=NULL)
{
p->next=l2;
l1->next=l2->next;
l2->next=l1;
p=l1;
if(p->next==NULL||p->next->next==NULL)
break;
else
{
l1=p->next;
l2=l1->next;
}
}
return hhead->next;
}