Title
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.
Language C
/**
* 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 *p, *q, *h, *pre;
// h = (struct ListNode *)malloc(sizeof(struct ListNode));
// h->val =0;
h->next = head;
p = head;
pre = h;
q = p->next;
while(p != NULL && q != NULL){//surprised that must have pre
//This isn't working : p->next = q->next;q->next = p;
pre->next = q;
p->next = q->next;
q->next = p;
pre = pre->next->next;
p = p->next;
q = p->next;
}
return h->next;
}
runtime:2ms