其他分享
首页 > 其他分享> > 力扣876. 链表的中间结点

力扣876. 链表的中间结点

作者:互联网

题目描述:

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

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

 

//双指针问题-上下指针-快慢指针

typedef struct ListNode Node;

struct ListNode* middleNode(struct ListNode* head){

    //如果链表为空,或者链表只有一个节点

    //返回头节点-return head;

    if(head == NULL||head->next==NULL)

        return head;

    //定义两个指针 -快慢指针

    //Node*slow=head,*fast=head;

    //快慢指针最开始分别指向头节点

    //slow走一步,fast走两步;

    Node*slow=head,*fast=head;

    //奇数个节点:

    //1 2 3 4 5

    //fast指向5的时候,slow指向3;

    //偶数个节点:

    //1 2 3 4 5 6

    //fast指向NULL的时候,slow指向4

    //因为不知道链表是奇数个还是偶数个节点

    //所以while的循环控制条件要用&&

    //fast!=NULL&&fast->next!=NULL

    while(fast&&fast->next)

    {

        //slow走一步,fast走两步;

        slow=slow->next;

        fast=fast->next->next;

    }

    //最后要求返回中间节点 -return slow;

    return slow;

}

 

标签:力扣,head,slow,876,fast,next,链表,节点
来源: https://blog.csdn.net/A240428037/article/details/115618098