leetcode简单题16 N.83 删除排序链表中的重复元素 rust描述


 

// [1,1,2]  [1,2]
// [1,1,2,3,3]  [1,2,3]
//链表的定义
#[derive(PartialEq, Eq, Clone, Debug)]
pub struct ListNode {
  pub val: i32,
  pub next: Option<Box<ListNode>>
}

impl ListNode {
  #[inline]//内嵌
  fn new(val: i32) -> Self {
    ListNode {
      next: None,
      val
    }
  }
}
// 迭代
pub fn delete_duplicates(mut head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
    let mut current = head.as_mut();
    while let Some(node) = current {
        while let Some(next) = node.next.as_mut() {
            if next.val == node.val {
                node.next = next.next.take();
            } else {
                break;
            }
        }
        current = node.next.as_mut();
    }
    head
}

// 递归

pub fn delete_duplicates2(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
    match head {
        Some(mut node) => {
            node.next = delete_duplicates2(node.next);
            if let Some(next) = node.next.as_ref() {
                if node.val == next.val {
                    return node.next;
                }
            }
            Some(node)
        }
        None => None,
    }
}

fn main() {
    // 根据测试用例 [1,1,2]  [1,2] 写断言
    let l1 = Some(Box::new(ListNode {
        val: 1,
        next: Some(Box::new(ListNode {
            val: 1,
            next: Some(Box::new(ListNode {
                val: 2,
                next: None,
            })),
        })),
    }));
    let l2 = Some(Box::new(ListNode {
        val: 1,
        next: Some(Box::new(ListNode {
            val: 2,
            next: None,
        })),
    }));
    assert_eq!(delete_duplicates(l1.clone()), l2.clone());
    assert_eq!(delete_duplicates2(l1.clone()), l2.clone());
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值