zoukankan      html  css  js  c++  java
  • (Good topic)快慢指针:链表的中间结点 (3.23leetcode每日打卡)

    给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
    如果有两个中间结点,则返回第二个中间结点。
     
    示例 1:
    输入:[1,2,3,4,5]
    输出:此列表中的结点 3 (序列化形式:[3,4,5])
    返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
    注意,我们返回了一个 ListNode 类型的对象 ans,这样:
    ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.

    示例 2:
    输入:[1,2,3,4,5,6]
    输出:此列表中的结点 4 (序列化形式:[4,5,6])
    由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。

     
    提示:

     给定链表的结点数介于 1 和 100 之间
    思路:
    学链表的时候听别人说,这好像是一道腾讯面试题,下面说思路。
    search是快指针,mid是慢指针,mid移动一个,search就移动两个,search指针移动到结尾,mid就指向了中间结点,返回即可,不过这题头结点竟然存放了数据,所以判断一下如果head->next == NULL,直接返回头结点
    还有两个思路就是先计数,用一个指针指向中间,或者导入数组寻找,不过效率都比快慢指针低
     1 struct ListNode* middleNode(struct ListNode* head)
     2 {
     3     struct ListNode *search;
     4     struct ListNode *mid;
     5     int mid_data;
     6 
     7     mid = search = head->next;
     8     if(mid == NULL)
     9     return head;
    10     while(search->next != NULL)
    11     {
    12         if(search->next->next != NULL)
    13         {
    14             search = search->next->next;
    15             mid = mid->next;
    16         }
    17         else
    18         {
    19             search = search->next;
    20         }
    21     }
    22 
    23     return mid;
    24 }
     
     
  • 相关阅读:
    (3)合并列值与分拆列值
    (2)SQL语句实现表的横向聚合
    (1)显示每个类别最新更新的数据
    【实践】WCF传输安全2:基于SSL的WCF匿名客户端
    超经典解释什么叫网关
    List集合操作一:遍历与查找
    RGB值及中文名称
    绑定树控件
    treeview的checkbox展开节点
    winform AutoScaleMode属性
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12550197.html
Copyright © 2011-2022 走看看