题解 | #链表的奇偶重排#

import java.util.*;
// 使用递归写法 浪费空间和时间,最好使用节点替换
// 先分奇偶 然后在按照顺序写入ListNode即可
/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode oddEvenList (ListNode head) {
        // 空链表或者只有一个结点
        if(null ==head || null == head.next) {
            return head;
        }

        StringBuilder noEvenNum = new StringBuilder();
        StringBuilder evenNum = new StringBuilder();
        oddEvenList(noEvenNum, evenNum, 0, head);
        // 组装node
        evenNum.append(noEvenNum);
        String[] splitNoEvenNum = evenNum.toString().split(",");
        int a = 0;
        int noVenLen = splitNoEvenNum.length;
        ListNode newListHead = null;
        if (noVenLen > 0) {
            newListHead = new ListNode(Integer.parseInt(splitNoEvenNum[a]));
            if (a + 1 < noVenLen) {
                deal(noVenLen, a, newListHead, splitNoEvenNum);
            }
        }

        return newListHead;
    }

    public static void deal(int venLen, int rem, ListNode head, String[] splitNum) {
        rem++;
        ListNode newListHead = new ListNode(Integer.parseInt(splitNum[rem]));
        head.next = newListHead;
        if (rem + 1 < venLen) {
            deal(venLen, rem, newListHead, splitNum);
        }
    }

    public static void oddEvenList(StringBuilder noEvenNum, StringBuilder evenNum,
                                   int remember, ListNode head) {
        int val = head.val;
        if (remember % 2 == 0) {
            evenNum.append(val).append(",");
        } else {
            noEvenNum.append(val).append(",");
        }
        remember++;
        ListNode next = head.next;
        if (null != next) {
            oddEvenList(noEvenNum, evenNum, remember, next);
        }
    }
}

全部评论

相关推荐

牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务