OJ:链表的中间结点

876. 链表的中间结点 - 力扣(LeetCode)

思路 

思路:首先最容易想到的思路是什么呢,就是先遍历一遍链表,用一个值count来记录链表的长度,然后我们运用除法,/2,结果是几,就是第几个是中间节点,但是这种方法其实是需要两个for循环的。还有一个思路,就是我们的快慢指针方法,这里我们用快慢指针的方法。

 

易错点 

 这里我觉得在声明fast和slow时,容易出错,还有fast&&fast->next时容易出错,首先第一个出错点我觉得在写那个slow时可能会忘记加*,对于while循环判断fast&&fast->next这里呢,这里可能会分不清用与还是或,这里我们想只要有一个条件不满足就直接跳出循环,所以只要有一个为假就跳出循环,所以用与就是&&,如果用或(||)的话,就是得满足两个条件才能跳出循环,还有就是fast和fast->next不能互换位置,否则假如fast为NULL,那么怎么能取到fast->NULL呢。

代码 


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {
    ListNode* fast,*slow;
    fast=slow=head;
    while(fast&&fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;
    }
    return slow;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值