单链表求中间节点

难度:两星

单链表求中间节点分为两种情况:

1 单链表长度为奇数时,如abcde,那么中间节点就是c。

2 单链表长度为偶数时,如abcdef,那么中间节点有两个c和d。本文简单起见就取第二个中间节点。

思想:其实思想很简单,其实就是跟《判断单链表存储的字符串是否为“回文串”》中求中间节点的方法一模一样,使用快慢指针来求解。

理解了思想,代码就很容易实现了,这里直接贴上来。

package com.coding.studiodemo.linklist;

/**
求单链表的中间节点:
如果长度为奇数,则求出中间节点
  abcde--->c
如果长度为偶数,则求出第二个中间节点
  abcdef--->d
*/
public class LinkMiddle{

    public static LinkNode getLinkMiddle(LinkNode head){
        LinkNode slow = head;
        LinkNode fast = head;
        while(fast.getNext()!=null){
             fast = fast.getNext().getNext();
             slow = slow.getNext();
        }
        return slow;
    }
 public static void main(String[] args) {
        LinkNode a = new LinkNode("a");
        LinkNode b = new LinkNode("b");
        LinkNode c = new LinkNode("c");
        LinkNode d = new LinkNode("d");
        LinkNode e = new LinkNode("e");
        a.setNext(b);
        b.setNext(c);
        c.setNext(d);
        d.setNext(e);
        LinkNode mid =  getLinkMiddle(a);
        System.out.print(mid);
    }

}
package com.coding.studiodemo.linklist;

/**
 * 定义单链表的节点
 * @author jeffSheng
 */
public class LinkNode {

    private String val;

    private LinkNode next;

    public LinkNode(String data){
        this.val  = data;
    }

    public String getData() {
        return val;
    }

    public LinkNode getNext() {
        return next;
    }

    public void setNext(LinkNode next) {
        this.next = next;
    }

    @Override
    public String toString() {
        return "["+val+"]";
    }
}

这里不作过多说明,很easy对吧,不明白的可以看下下边的图。

你还有什么办法?欢迎一起留言交流哦~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公众号: 江南烟雨中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值