算法基础-链表

1. 链表的中点

使用快慢指针寻找链表的中点有2种方式,分别是fast=head; fast=head.next;

1. fast = head;

    public ListNode findMidNodeFromHead(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;
        while ((fast != null) && (fast.next != null)) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }

2. fast = head.next;

    public ListNode findMidNodeFromHeadNext(ListNode head) {
        ListNode slow = head;
        ListNode fast = head.next;
        while ((fast != null) && (fast.next != null)) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }

这2种方式寻找链表的结点主要区别是 当链表的长度为奇偶数时,找到链表中点的位置一个靠后,一个靠前。

当链表为奇数时  [1->2->3->4->5]

        //odd number length
        ListNode oddMidFromHead = findMidNodeFromHead(head2);
        ListNode oddMidFromHeadNext = findMidNodeFromHeadNext(head2);
        System.out.println("oddMidFromHead=" + oddMidFromHead + " oddMidFromHeadNext=" + oddMidFromHeadNext);

         //output
        oddMidFromHead=[3->4] oddMidFromHeadNext=[3->4]

当链表长度为奇数时,找到的中点2种方式是一样的。

当链表为偶数时   [1->2->3->4]

        //even number length
        ListNode evenMidFromHead = findMidNodeFromHead(head);
        ListNode evenMidFromHeadNext = findMidNodeFromHeadNext(head);
        System.out.println("evenMidFromHead=" + evenMidFromHead + " evenMidFromHeadNext=" + evenMidFromHeadNext);

        //output
        evenMidFromHead=[3->4] evenMidFromHeadNext=[2->3]

当链表的长度为偶数时,head找到的中点是靠后的,因为fast相对slow移动只快了1步,而head.next找到的中点是靠前的,因为fast相对slow移动快了2步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值