diff --git a/solution/0000-0099/0083.Remove Duplicates from Sorted List/README.md b/solution/0000-0099/0083.Remove Duplicates from Sorted List/README.md index 21246c6770923..0a8c8738a23f5 100644 --- a/solution/0000-0099/0083.Remove Duplicates from Sorted List/README.md +++ b/solution/0000-0099/0083.Remove Duplicates from Sorted List/README.md @@ -155,6 +155,43 @@ func deleteDuplicates(head *ListNode) *ListNode { } ``` +### **Rust** + +```rust +// Definition for singly-linked list. +// #[derive(PartialEq, Eq, Clone, Debug)] +// pub struct ListNode { +// pub val: i32, +// pub next: Option> +// } +// +// impl ListNode { +// #[inline] +// fn new(val: i32) -> Self { +// ListNode { +// next: None, +// val +// } +// } +// } +impl Solution { + pub fn delete_duplicates(head: Option>) -> Option> { + let mut dummy = Some(Box::new(ListNode::new(i32::MAX))); + let mut p = &mut dummy; + + let mut current = head; + while let Some(mut node) = current { + current = node.next.take(); + if p.as_mut().unwrap().val != node.val { + p.as_mut().unwrap().next = Some(node); + p = &mut p.as_mut().unwrap().next; + } + } + dummy.unwrap().next + } +} +``` + ### **...** ``` diff --git a/solution/0000-0099/0083.Remove Duplicates from Sorted List/README_EN.md b/solution/0000-0099/0083.Remove Duplicates from Sorted List/README_EN.md index cae12eb56f770..b52477b7ddb26 100644 --- a/solution/0000-0099/0083.Remove Duplicates from Sorted List/README_EN.md +++ b/solution/0000-0099/0083.Remove Duplicates from Sorted List/README_EN.md @@ -145,6 +145,43 @@ func deleteDuplicates(head *ListNode) *ListNode { } ``` +### **Rust** + +```rust +// Definition for singly-linked list. +// #[derive(PartialEq, Eq, Clone, Debug)] +// pub struct ListNode { +// pub val: i32, +// pub next: Option> +// } +// +// impl ListNode { +// #[inline] +// fn new(val: i32) -> Self { +// ListNode { +// next: None, +// val +// } +// } +// } +impl Solution { + pub fn delete_duplicates(head: Option>) -> Option> { + let mut dummy = Some(Box::new(ListNode::new(i32::MAX))); + let mut p = &mut dummy; + + let mut current = head; + while let Some(mut node) = current { + current = node.next.take(); + if p.as_mut().unwrap().val != node.val { + p.as_mut().unwrap().next = Some(node); + p = &mut p.as_mut().unwrap().next; + } + } + dummy.unwrap().next + } +} +``` + ### **...** ``` diff --git a/solution/0000-0099/0083.Remove Duplicates from Sorted List/Solution.rs b/solution/0000-0099/0083.Remove Duplicates from Sorted List/Solution.rs new file mode 100644 index 0000000000000..48cbf6e5b5f1a --- /dev/null +++ b/solution/0000-0099/0083.Remove Duplicates from Sorted List/Solution.rs @@ -0,0 +1,32 @@ +// Definition for singly-linked list. +// #[derive(PartialEq, Eq, Clone, Debug)] +// pub struct ListNode { +// pub val: i32, +// pub next: Option> +// } +// +// impl ListNode { +// #[inline] +// fn new(val: i32) -> Self { +// ListNode { +// next: None, +// val +// } +// } +// } +impl Solution { + pub fn delete_duplicates(head: Option>) -> Option> { + let mut dummy = Some(Box::new(ListNode::new(i32::MAX))); + let mut p = &mut dummy; + + let mut current = head; + while let Some(mut node) = current { + current = node.next.take(); + if p.as_mut().unwrap().val != node.val { + p.as_mut().unwrap().next = Some(node); + p = &mut p.as_mut().unwrap().next; + } + } + dummy.unwrap().next + } +}