Leetcode / 206. Reverse Linked List
Pick a programming language:
Here is the source code for the solution to this problem.
// Definition for singly-linked list.
// #[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
// }
// }
// }
impl Solution {
pub fn reverse_list(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
let mut curr = head;
let mut prev = None;
while let Some(mut node) = curr {
let mut next = node.next.take();
node.next = prev.take();
prev = Some(node);
curr = next.take();
}
return prev;
}
}
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
ListNode reverse(ListNode curr, ListNode prev) {
if (curr == null) {
return prev;
}
ListNode next = curr.next;
curr.next = prev;
return reverse(next, curr);
}
public ListNode reverseList(ListNode head) {
return reverse(head, null);
}
}
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
// iterative solution
// time O(n)
// space O(1)
// class Solution {
// public ListNode reverseList(ListNode head) {
// ListNode curr = head;
// ListNode prev = null;
// while (curr != null) {
// ListNode next = curr.next;
// curr.next = prev;
// prev = curr;
// curr = next;
// }
// return prev;
// }
// }
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: