leetcode 49: Swap Nodes in Pairs
Feb 15 '12
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; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ // NULL, {1}, {1,2}, {1,2,3}, {1,2,3,4} class Solution { public: ListNode *swapPairs(ListNode *head) { // Start typing your C/C++ solution below // DO NOT write int main() function //if(!head || !head->next) return head; no need. while condition have same effect. ListNode ** p = &head; ListNode * pre = NULL; ListNode * cur = head; ListNode * nxt = NULL; while(cur!=NULL && cur->next!=NULL) { for(int i=0; i<2; i++) { nxt = cur->next; cur->next = pre; pre = cur; //do not forget renew pre. cur = nxt; } ListNode * t = *p;//(*p)->next; //!!important, when dereference **, it is already point to the next. *p = pre; t->next = nxt; p = &(t->next); pre = NULL; //do not forget assign NULL to pre. } return head; } };