java链表快慢指针找到中间节点

文章介绍了两种在链表中查找中间节点或特定位置节点的方法:一是通过添加虚拟节点找到中间节点或后半部分的第一个节点;二是不加虚拟节点分别针对找到中间节点的下一个节点和偶数时前半部分的最后一个节点。这些方法适用于链表操作,如归并排序中的分治策略。
摘要由CSDN通过智能技术生成

一、加虚拟节点

1、找到中间节点的上一个节点

1  2  3  4  5  6  7  8  null

             |               |

           slow         fast

1  2  3  4  5  6  7  null

         |           |

      slow      fast

ListNode dummy = new ListNode();
dummy = head;
ListNode slow = dummy,fast = dummy;
while(fast.next != null && fast.next.next != null){
    slow = slow.next;
    fast = fast.next.next;
}

2、在偶数个时找到的是后一半的第一个

1  2  3  4  5  6  7  8  null

                 |                  |

               slow            fast

1  2  3  4  5  6  7  null

             |                 |

           slow           fast

ListNode dummy = new ListNode();
dummy = head;
ListNode slow = dummy,fast = dummy;
    while(fast != null){
        slow = slow.next;
        fast = fast.next;
        if(fast != null) fast = fast.next;
    }

二、不加虚拟节点

1、找到中间节点的下一个节点

适合归并排序时用

1  2  3  4  5  6  7  8  null

                 |                  |

               slow            fast

1  2  3  4  5  6  7  null

                 |             |

               slow       fast

ListNode slow = head,fast = head;
        while(fast != null){
            slow = slow.next;
            fast = fast.next;
            if(fast != null) fast = fast.next;
        }

2、在偶数时找到前一半的最后一个

1  2  3  4  5  6  7  8  null

             |                    |

           slow              fast

1  2  3  4  5  6  7  null

             |                |

           slow          fast

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

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值