aboutsummaryrefslogtreecommitdiff
path: root/other/delete_middle_node.rs
diff options
context:
space:
mode:
authorJack Sangdahl <[email protected]>2025-03-10 00:36:13 -0600
committerJack Sangdahl <[email protected]>2025-03-10 00:36:13 -0600
commit7c60dee83b436e8e8a667bf9f191beced8de4fc3 (patch)
treeeb7a24ee2067f92245c57bb118e85a1baf15df50 /other/delete_middle_node.rs
parent5d7cdc215e4ba1ec4cbb24c084cccb5e5e641468 (diff)
downloadleetcode-7c60dee83b436e8e8a667bf9f191beced8de4fc3.tar.gz
leetcode-7c60dee83b436e8e8a667bf9f191beced8de4fc3.zip
chore: move cpp and rust code to directory
Diffstat (limited to 'other/delete_middle_node.rs')
-rw-r--r--other/delete_middle_node.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/other/delete_middle_node.rs b/other/delete_middle_node.rs
new file mode 100644
index 0000000..289d8dd
--- /dev/null
+++ b/other/delete_middle_node.rs
@@ -0,0 +1,52 @@
+pub struct Solution;
+pub struct ListNode {
+ pub val: i32,
+ pub next: Option<Box<ListNode>>
+}
+
+impl ListNode {
+ #[inline]
+ fn new(val: i32) -> self {
+ ListNode {
+ next: None,
+ val
+ }
+ }
+}
+
+impl Solution {
+ pub fn delete_middle(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
+ let mut slowPtr = &head;
+ let mut fastPtr = &head;
+ let mut fakeHead = Box::new(ListNode::new(-1));
+ let mut fakeTmp = &mut *fakeHead as *mut ListNode;
+ let mut slowPrevPtr = &mut *fakeHead as *mut ListNode;
+ while fastPtr.is_some() && (fastPtr).as_ref().unwrap().next.is_some() {
+ unsafe {
+ let mut next = Box::new(ListNode::new((slowPtr).as_ref().unwrap().val));
+ let nextPtr = &mut *next as *mut ListNode;
+ (*fakeTmp).next = Some(next);
+ slowPrevPtr = fakeTmp;
+ fakeTmp = nextPtr;
+ slowPtr = &(slowPtr).as_ref().unwrap().next;
+ fastPtr = &(fastPtr).as_ref().unwrap().next;
+ if fastPtr.is_some() {
+ fastPtr = &(fastPtr).as_ref().unwrap().next;
+ }
+ }
+ }
+ slowPtr = &(slowPtr).as_ref().unwrap().next;
+ while slowPtr.is_some() {
+ unsafe {
+ let mut next = Box::new(ListNode::new((slowPtr).as_ref().unwrap().val));
+ let nextPtr = &mut *next as *mut ListNode;
+ (*fakeTmp).next = Some(next);
+ fakeTmp = nextPtr;
+ slowPtr = &(slowPtr).as_ref().unwrap().next;
+ }
+ }
+ fakeHead.next
+ }
+}
+
+fn main() {}