Java返回链表的中间结点,如果有两个中间结点,则返回第⼆个中间结点

题目:力扣

思路1: 

 

 代码1:

class Solution {
    public ListNode middleNode(ListNode head) {
        if(head==null){//链表为空,没有中间节点
            return null;
        }
        ListNode cur=head;
        int size=0;
        while(cur!=null){
            size++;
            cur=cur.next;
        }
        cur=head;
        int n=size/2;
        while(n!=0){
            cur=cur.next;
            n--;
        }
        return cur;
    }
}

 

 运行结果1:

思路2:

代码2:

idea代码:

public ListNode middleNode1(){
       if(head==null){
           return head;
       }
       ListNode fast=head;
       ListNode slow=head;
       while(fast!=null&&fast.next!=null){//当链表长度为偶数时的结束条件是fast==null,当链表长度为
                                          //奇数时,结束条件为fast.next==null,两个条件之间要用&&
                                          //不能用||,而且fast!=null在前,要先判断fast是不是等于null
                                          //要是先判断fast.next!=null那么当fast==null时会出现空指针异常
           fast=fast.next.next;
           slow=slow.next;
       }
       return slow;
    }
}

力扣代码: 

class Solution {
    public ListNode middleNode(ListNode head) {
        if(head==null){
           return head;
       }
       ListNode fast=head;
       ListNode slow=head;
       while(fast!=null&&fast.next!=null){
           fast=fast.next.next;
           slow=slow.next;
       }
       return slow;
    }
}

 

运行结果2: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值