Given a linked list, swap every two adjacent nodes and return its head.node
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.spa
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.code
/** * 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) { struct ListNode *tmphead,*ptr1,*ptr2; tmphead = new ListNode(0); ptr1 = new ListNode(0); ptr2 = new ListNode(0); tmphead->next = head; head = tmphead; while (head->next != NULL && head->next->next != NULL){ ptr1 = head->next,ptr2 = head->next->next; //交換位置 head->next = ptr2; ptr1->next = ptr2->next; ptr2->next = ptr1; //更新待交換位置,因爲ptr1更換到後位置,因此head=ptr1 head = ptr1; } return tmphead->next; } };