Skip to content

Instantly share code, notes, and snippets.

@luismendes070
Created February 25, 2024 13:47
Show Gist options
  • Save luismendes070/210170a941b5beeccd8bd605c39d115c to your computer and use it in GitHub Desktop.
Save luismendes070/210170a941b5beeccd8bd605c39d115c to your computer and use it in GitHub Desktop.
assembly https://www.codeconvert.ai/rust-to-assembly-converter
@luismendes070
Copy link
Author

`section .text
global _start

_start:
; Function call to remove_nth_from_end
push qword [rbp + 16] ; n
push qword [rbp + 8] ; head
call remove_nth_from_end_recr
add rsp, 16
mov rdi, rax
call exit

remove_nth_from_end_recr:
; Function prologue
push rbp
mov rbp, rsp

; Function body
mov rax, qword [rbp + 16] ; n
mov rcx, 1
cmp qword [rbp + 8], 0 ; head
jne .L1
mov rax, 0 ; None
mov rdx, 1
jmp .L2

.L1:
mov rdx, qword [rbp + 8] ; head
mov rdx, qword [rdx]
push rax
push rdx
call remove_nth_from_end_recr
add rsp, 16
mov rdx, rax
cmp rax, rcx
jne .L3
mov rax, rdx
add rax, 1
jmp .L2
.L3:
mov rdx, qword [rbp + 8] ; head
mov rax, qword [rdx]
mov qword [rax], rdx
mov rax, qword [rbp + 16] ; n
add rax, 1
.L2:
; Function epilogue
mov rsp, rbp
pop rbp
ret

`

@luismendes070
Copy link
Author

`// https://leetcode.com/problems/remove-nth-node-from-end-of-list/solutions/1658772/rust-0ms-faster-than-100-recursive-solution-with-backtracking-no-cloning
// Definition for singly-linked list.
// #[derive(PartialEq, Eq, Clone, Debug)]
// pub struct ListNode {
// pub val: i32,
// pub next: Option<Box>
// }
//
// impl ListNode {
// #[inline]
// fn new(val: i32) -> Self {
// ListNode {
// next: None,
// val
// }
// }
// }
impl Solution {
pub fn remove_nth_from_end(head: Option<Box>, n: i32) -> Option<Box> {
remove_nth_from_end_recr(head, n).0
}
}

fn remove_nth_from_end_recr(head: Option<Box>, n: i32) -> (Option<Box>, usize) {
match head {
None => (None, 1),
Some(mut node) => {
let (prev, num) = remove_nth_from_end_recr(node.next.take(), n);
if n == num as i32 {
(prev, num+1)
} else {
node.next = prev;
(Some(node), num+1)
}
}
}
}`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment