本文主要是介绍力扣876链表的中间节点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给定一个头结点为 head
的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/class Solution {public ListNode middleNode(ListNode head) {ListNode fast=head,slow=head;while(fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;}return slow;}}
提到此处的思路还是简单的 ,但是我初次做的时候判断条件没有搞清楚。
这里用的是快慢指针,慢的指针一次往后偏移一个位置,快的指针一次偏移两个位置,这样呢大致的想快的指针到了末尾,慢指针不就到中间了嘛。
可是判断条件 我没有想对,读到本文的朋友看看自己有没有做错
对于奇数个数来说呢,奇数往后跳,一定是跳到最后的一个数的,这时fast!=null,&&fast.next!=null,当快指针跳到最后一个数很自然慢指针就到最中间了
可是对于偶数个数来说呢?比如 0 1 2 3 4 5 这六个数,快指针往后跳跳到4的时候这时慢指针在2这个位置,但是答案呢,要求应该是3,所以快指针要再跳一次,跳到4判断快指针,4这个节点不为空,4的下一个节点也不为空,往后跳!此处这个判断条件适应于奇数和偶数。
这篇关于力扣876链表的中间节点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!