力扣:链表的中间结点 (C语言--双指针)

题目描述:

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

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

力扣:链表的中间结点 (C语言--双指针)_第1张图片 

一、解题步骤

这个题我设了两个指向head的指针,一个快指针,每次移动+2;一个慢指针,每次移动加1。然后这个的话快指针指向NULL时,慢指针指向刚好符合要求,指向题目中要求的中间结点

然后注意指向范围

二、代码

代码如下(示例):

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* middleNode(struct ListNode* head){
       int len=0;
       int n,i;
       struct ListNode *p=head;//快指针
       struct ListNode *q=head;//慢指针
       while(p!=NULL&&p->next!=NULL)//范围要求
       {
           p=p->next->next;
           q=q->next;
       }
       return q;
}

你可能感兴趣的:(leetcode,c语言,数据结构,算法)