carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode876:链表的中间结点(middle-of-the-linked-list) #154

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例 1:

image

输入:head = [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为 3 。

示例 2:

image

输入:head = [1,2,3,4,5,6] 输出:[4,5,6] 解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

carloscn commented 1 year ago

问题分析

首先main_node指针对链表进行遍历,接着我们设定一个middle_node指针,middle指针操作规则:

main遍历完成之后,返回middle_node地址。

RUST版本和上述不太一样,因为底层是迭代器

use utils::linked_list::*;

pub fn middle_node(head: List<i32>) -> List<i32>
{
    let len = head.len();
    let mut ret_list:List<i32> = List::new();
    let mut main_iter = head.into_iter();
    let mut i:usize = 0;

    while let Some(node) = main_iter.next() {
        if i < (len as f64 / 2.0).ceil() as usize {
            ret_list.push(node);
        }
        i += 1;
    }

    return ret_list;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/551255 https://github.com/carloscn/structstudy/commit/306d65b15b7da9700ba6b71df1d1b2aa7c8ed60a