刷题16:奇偶链表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题16:奇偶链表相关的知识,希望对你有一定的参考价值。

Leetcode: 328. 奇偶链表

解法:设置一个标志位isOdd,由于开始从链表第一个元素遍历,因此isOdd初始值设为true,每遍历一个元素,isOdd=!isOdd,当isOdd为true,遍历到的元素插入到奇链表的尾部,当isOdd为false,元素插入到偶链表尾部,最终得到一个奇链表和偶链表,将奇链表的尾元素的下一个位置指向even.next。注意:偶链表的最后一个元素的next要设置为null,否则会出现循环链表。

class Solution {
    public ListNode oddEvenList(ListNode head) {
        ListNode odd = new ListNode(-1),oddTail = odd;
        ListNode even = new ListNode(-1),evenTail = even;
        boolean isOdd = true;

        while(head != null){
            if(isOdd == true){
                oddTail.next = head;
                oddTail = oddTail.next;
            }else{
                evenTail.next = head;
                evenTail = evenTail.next;
            }

            head = head.next;
            isOdd = !isOdd;
        }

        evenTail.next = null;
        oddTail.next = even.next;

        return odd.next;
    }   
}

以上是关于刷题16:奇偶链表的主要内容,如果未能解决你的问题,请参考以下文章

力扣刷题:奇偶链表(java实现)

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

leetcode刷题16.环形链表——Java版

LeetCode Algorithm 328. 奇偶链表

LeetCode Algorithm 328. 奇偶链表

LeetCode 328. 奇偶链表c++/java详细题解