
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
class Solution { public: ListNode* (ListNode* head) { if (head == NULL || head->next == NULL) return head; ListNode *root = head->next; head->next = root->next; root->next = head; ListNode *p = root->next; while (p->next != NULL && p->next->next != NULL) { ListNode *one = p->next; p->next = one->next; one->next = p->next->next; p->next->next = one; p = p->next->next; } return root; } };
|
近期评论