📜  隔离链表中的偶数和奇数节点(1)

📅  最后修改于: 2023-12-03 15:28:52.073000             🧑  作者: Mango

隔离链表中的偶数和奇数节点

在一些情况下,我们需要将链表中的奇数节点和偶数节点分别隔离开来。这个问题可以使用两个指针来解决。一个指针用来遍历奇数节点,而另一个指针用来遍历偶数节点。

方法
  • 创建两个指针,一个指向偶数节点,一个指向奇数节点。
  • 遍历链表,每当遇到偶数节点时就将其链接到偶数节点的指针。同样的,每当遇到奇数节点时就链接到奇数节点的指针。
  • 最后,将偶数节点的链表链接到奇数链表的尾部。
代码实现
public ListNode oddEvenList(ListNode head) {
    if (head == null)
        return null;
    ListNode odd = head, even = head.next, evenHead = even;
    while (even != null && even.next != null) {
        odd.next = even.next;
        odd = odd.next;
        even.next = odd.next;
        even = even.next;
    }
    odd.next = evenHead;
    return head;
}
示例

给定链表 1->2->3->4->5->NULL

可以通过调用 oddEvenList方法,输出1->3->5->2->4->NULL

性能分析
  • 时间复杂度:O(n)。一次遍历链表。
  • 空间复杂度:O(1)。只使用了有限的额外内存。