问题:给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
例如:
输入:[1,2,3,4,5,6,7,8]
输出:此列表中的结点 5 (序列化形式:[4,5,6])
思路:首先要考虑链表为空的情况。利用快慢指针的方法定义一个快指针(每次走两格),慢指针(每次走一格)。当快指针走大到最后一个节点(奇数个)或者最后一个的.next处(偶数个)时,返回slow的值。
主要代码:
class ListNode{ public int val; public ListNode next; }
public ListNode middleNode(ListNode head){ if(head==null||head.next==null){return head;} ListNode snow=head; ListNode fast=head; while((fast!=null)&&(fast.next!=null)){ ListNode flag=fast.next; fast=flag.next; snow=snow.next; } return snow; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)