题解 | 链表的奇偶重排

import java.util.*;

/*
 * 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(head == null || head.next == null) {
            return head;
        }
	  	/**
		* 解体思路:
		* 1、遍历整个队列,提取出所有的偶数节点放入到list中
		* 2、遍历的同时,剔除掉偶数节点,也就是把所有的奇数节点组装起来
		* 3、把偶数节点追加到奇数节点后面
		* 4、最后一步,不要忘了把最后一个节点的next置为null
		*
		*/
        List<ListNode> list = new ArrayList<>();
        ListNode result = head;
        ListNode temp = head;
        boolean flag = false;
        while(temp != null) {
            if(flag) {
                list.add(temp);
                if(temp.next!= null) {
                    result.next = temp.next;
                    result = result.next;
                }
            }
            temp = temp.next;
            flag = !flag;
        }
        for(ListNode node : list) {
            result.next = node;
            result = node;
        }
        result.next = null;
        return head;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务