给你一个链表,请你两两交换相邻节点,你需要真正交换节点本身,而不是修改节点的值。
两两交换示例:
链表 :1->2->3->4
交换后 :2->1->4->3
链表 :1->2->3
交换后: 2->1->3
数据范围:链表长度满足 , 链表上的值满足
/** * #[derive(PartialEq, Eq, Debug, Clone)] * pub struct ListNode { * pub val: i32, * pub next: Option<Box<ListNode>> * } * * impl ListNode { * #[inline] * fn new(val: i32) -> Self { * ListNode { * val: val, * next: None, * } * } * } */ struct Solution{ } impl Solution { fn new() -> Self { Solution{} } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ pub fn swapLinkedPair(&self, head: Option<Box<ListNode>>) -> Option<Box<ListNode>> { // write code here let mut dummy_head = Some(Box::new(ListNode::new(233))); dummy_head.as_mut()?.next = head; // println!("{}", dummy_head.as_mut()?.val); let mut p = &mut dummy_head; while p.is_some() && p.as_ref()?.next.is_some() && p.as_ref()?.next.as_ref()?.next.is_some() { let mut a = p.as_mut()?.next.take(); let mut b = a.as_mut()?.next.take(); let mut c = b.as_mut()?.next.take(); p.as_mut()?.next = b; p = &mut p.as_mut()?.next; p.as_mut()?.next = a; p = &mut p.as_mut()?.next; p.as_mut()?.next = c; } dummy_head?.next } }