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

题目描述:

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

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

 

一、解题步骤

这个题我设了两个指向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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值