Swap Nodes in Pairs-solution report, nodespairs
[Question]
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 shocould use only constant space. You may not modify the values in the list, only nodes itself can be changed.
[Analysis]
Recursive solution: first, the recursion condition must be that the remaining length of the linked list is 0 or 1, that is, head = NULL, head-> next = NULL. Second,Be sure to reverse the two nodes when the linked list still has the remaining nodes. Otherwise, head-> next is empty. How can we reverse the back node? For details, see the following annotations.
[Code]
Running time 4 ms
/*** 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) {if (head = NULL | head-> next = NULL) // recursive exit condition return head; listNode * tmp = swapPairs (head-> next); // be sure to recursively follow the previous steps. If the head-> next is empty, you can see the result after recursion, however, you cannot determine whether to directly go to head-> next. ListNode * res = head-> next; res-> next = head; res-> next = tmp; return res ;}};