Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list’s nodes (i.e., only nodes themselves may be changed.)
Example 1:
Input: head = [1,2,3,4]
Output: [2,1,4,3]
Example 2:
Input: head = []
Output: []
Example 3:
Input: head = [1]
Output: [1]
Constraints:
The number of nodes in the list is in the range [0, 100].
0 <= Node.val <= 100
Code
Recursive
Time Complexity: O(N), Space Complexity: O(1)
Iterative
Time Complexity: O(N), Space Complexity: O(1)
Iterative Pointer to Pointer
Time Complexity: O(N), Space Complexity: O(1)
while loop 會先確認 a & b 所指向的地方是 valid 的(不為 nullptr),才會進行 while loop 中改變 pointer 的操作。
關鍵在於:iter 一開始會是指向 head 的 pointer,但是在第二循環後,就不會指向 head,但是在第一循環會修改 head 的 address 使得答案正確。