mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-10-31 10:26:48 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| /*
 | |
|  * File: list_node.rs
 | |
|  * Created Time: 2023-03-05
 | |
|  * Author: codingonion (coderonion@gmail.com), rongyi (hiarongyi@gmail.com)
 | |
|  */
 | |
| 
 | |
| use std::cell::RefCell;
 | |
| use std::collections::HashMap;
 | |
| use std::rc::Rc;
 | |
| 
 | |
| #[derive(Debug)]
 | |
| pub struct ListNode<T> {
 | |
|     pub val: T,
 | |
|     pub next: Option<Rc<RefCell<ListNode<T>>>>,
 | |
| }
 | |
| 
 | |
| impl<T> ListNode<T> {
 | |
|     pub fn new(val: T) -> Rc<RefCell<ListNode<T>>> {
 | |
|         Rc::new(RefCell::new(ListNode { val, next: None }))
 | |
|     }
 | |
| 
 | |
|     /* 將陣列反序列化為鏈結串列 */
 | |
|     pub fn arr_to_linked_list(array: &[T]) -> Option<Rc<RefCell<ListNode<T>>>>
 | |
|     where
 | |
|         T: Copy + Clone,
 | |
|     {
 | |
|         let mut head = None;
 | |
|         // insert in reverse order
 | |
|         for item in array.iter().rev() {
 | |
|             let node = Rc::new(RefCell::new(ListNode {
 | |
|                 val: *item,
 | |
|                 next: head.take(),
 | |
|             }));
 | |
|             head = Some(node);
 | |
|         }
 | |
|         head
 | |
|     }
 | |
| 
 | |
|     /* 將鏈結串列轉化為雜湊表 */
 | |
|     pub fn linked_list_to_hashmap(
 | |
|         linked_list: Option<Rc<RefCell<ListNode<T>>>>,
 | |
|     ) -> HashMap<T, Rc<RefCell<ListNode<T>>>>
 | |
|     where
 | |
|         T: std::hash::Hash + Eq + Copy + Clone,
 | |
|     {
 | |
|         let mut hashmap = HashMap::new();
 | |
|         let mut node = linked_list;
 | |
| 
 | |
|         while let Some(cur) = node {
 | |
|             let borrow = cur.borrow();
 | |
|             hashmap.insert(borrow.val.clone(), cur.clone());
 | |
|             node = borrow.next.clone();
 | |
|         }
 | |
| 
 | |
|         hashmap
 | |
|     }
 | |
| }
 | 
