之前的做法是双指针都指向head, 然后一个走一步一个走两步这样。这种做法对于偶数个结点,得到的中间结点是中间两个后面的一个,特别的,对于2个结点的,得到的是后面那个结点是中间结点。在分拆时一般mid 作为前半部分的最后一个结点,mid->next作为后半部分的起点。这样2个结点时,分拆后的第一个链表和原链表一样,第二个链表是空。这样就没有reduce,递归无法收敛或者死循环。
更新:
初始化为:p 指向head, q 指向第二个结点。然后再一个走一步,一个走两步。这样偶数情况下得到的中点是中间两个前面一个。