24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
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
Follow up: Can you solve the problem without modifying the values in the list's nodes? (i.e., Only nodes themselves may be changed.)
Rust Solution
struct Solution;
use rustgym_util::*;
impl Solution {
fn swap_pairs(head: ListLink) -> ListLink {
if let Some(mut first) = head {
if let Some(mut second) = first.next.take() {
let rest = second.next.take();
first.next = Self::swap_pairs(rest);
second.next = Some(first);
Some(second)
} else {
Some(first)
}
} else {
None
}
}
}
#[test]
fn test() {
let head = list!(1, 2, 3, 4);
let res = list!(2, 1, 4, 3);
assert_eq!(Solution::swap_pairs(head), res);
}
Having problems with this solution? Click here to submit an issue on github.