美文网首页
【链表】 奇偶链表

【链表】 奇偶链表

作者: Spring_java | 来源:发表于2021-01-20 14:54 被阅读0次

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

    请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/odd-even-linked-list

    输入: 1->2->3->4->5->NULL
    输出: 1->3->5->2->4->NULL
    

    代码:

              if(head==null){
                    return null;
             }
            ListNode node2=head.next;
            ListNode odd=head;
            ListNode even=node2;
    
            while(even!=null && even.next!=null){
                    odd.next=even.next;
                    odd=odd.next;
                    even.next=odd.next;
                    even=even.next;
            }
            odd.next=node2;
            return head;
        }
    

    思路:
    对于原始链表,每个节点都是奇数节点或偶数节点。头节点是奇数节点,头节点的后一个节点是偶数节点,相邻节点的奇偶性不同。因此可以将奇数节点和偶数节点分离成奇数链表和偶数链表,然后将偶数链表连接
    在奇数链表之后,合并后的链表即为结果链表。

    原始链表的头节点 head 也是奇数链表的头节点以及结果链表的头节点,head 的后一个节点是偶数链表的头节点。令 evenHead = head.next,则 evenHead 是偶数链表的头节点。

    维护两个指针 odd 和 even 分别指向奇数节点和偶数节点,初始时 odd = head,even = evenHead。通过迭代的方式将奇数节点和偶数节点分离成两个链表,每一步首先更新奇数节点,然后更新偶数节点。

    作者:LeetCode-Solution
    链接:https://leetcode-cn.com/problems/odd-even-linked-list/solution/qi-ou-lian-biao-by-leetcode-solution/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:【链表】 奇偶链表

          本文链接:https://www.haomeiwen.com/subject/wnskzktx.html