【问题标题】:Why the result won't be the same when I change the && condition:为什么当我更改 && 条件时结果不会相同:
【发布时间】:2023-02-11 22:28:26
【问题描述】:

Finding middle element in a linked list

给定一个包含 N 个节点的单链表。 任务是找到链表的中间部分。例如,如果链表是 1->2->3->4->5,则链表的中间节点为3。 如果有两个中间节点(以防万一,当 N 为偶数时),打印第二个中间元素。 比如给定的链表是1->2->3->4->5->6,那么链表的中间节点就是4。

示例 1:

输入: 链表:1->2->3->4->5 输出:3 解释: 链表的中间是 3。 示例 2:

输入: 链表:2->4->6->7->5->1 输出:7 解释: 链表的中间是 7。 你的任务: 任务是完成 getMiddle() 函数,该函数将头引用作为唯一参数,并应返回链表中间节点的数据。

预期时间复杂度:O(N)。 预期辅助空间:O(1)。

约束: 1 <= N <= 5000

class Solution{
    public:
    /* Should return data of middle node. If linked list is empty, then  -1*/
    int getMiddle(Node *head)
    {
        Node* fast = head;
        Node *slow = head;
        
        if (head != NULL){
            while(fast->next != NULL && fast != NULL) //here
            {
                fast = fast->next->next;
                slow = slow->next;
            }
        }
        
        return slow->data;
    }
};

// Runtime Error: Segmentation Fault (SIGSEGV)

class Solution{
    public:
    /* Should return data of middle node. If linked list is empty, then  -1*/
    int getMiddle(Node *head)
    {
        Node* fast = head;
        Node *slow = head;
        
        if (head != NULL){
            while(fast != NULL && fast->next != NULL) //here
            {
                fast = fast->next->next;
                slow = slow->next;
            }
        }
        
        return slow->data;
    }
};

// Problem Solved Successfully

【问题讨论】:

  • &amp;&amp; 从左到右选中。如果fast == NULLfast-&gt;next不合法并崩溃,则必须在确保fast不为空后进行检查。
  • 请为您的两个示例提供minimal reproducible example。就像现在一样,它们不能被编译用于内省。

标签: c++ linked-list


【解决方案1】:

这个while(fast-&gt;next != NULL &amp;&amp; fast != NULL) 没有意义。如果 fast 等于 NULL 那么 fast-&gt;next 是未定义的。当fast 不是NULL 时,这可以是“好的”的唯一方法。

在第二个中,您首先检查 fast 是否等于 NULL 并且由于 &amp;&amp; 的短路仅当它不相等时才被取消引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2013-11-16
    • 2020-07-15
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多