725. Split Linked List in Parts

原题

  • 题目描述:给你一个链表,安给定的要求分成几段,每段之间长度不相差1,且前面的链表的长度大于等于后面的链表长
  • 思路:
    1. 先遍历求出链表长
    2. 再用长度和份数求商得到每段的基本长,求余得到剩下的长度,剩下的长度则遍历时自减分配给前面的链表,当分配完后,后面的链表长度就为基本长
    3. 用一个指针从头遍历整个链表不停歇,另一个指针根据算出的链表长,在链表中走相对应的长度的步数,走完一个置next域为空.

java代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode[] splitListToParts(ListNode root, int k) {
        int length=0;
        ListNode p=root;
        while(p!=null){
            length++;
            p=p.next;
        }
        int basLen=length/k;
        int extrLen=length%k;
        ListNode[] list=new ListNode[k];
        ListNode cur=root;
        ListNode pre=null;
        for(int i=0;inull);i++,extrLen--){
            list[i]=cur;
            for(int j=0;j 0 ? 1 : 0);j++){
                pre=cur;
                cur=cur.next;
            }
            pre.next=null;
        }
        return list;
    }
}

你可能感兴趣的:(LeetCode题解,LinkList,medium,LeetCode最优解)