📌  相关文章
📜  用于以交替奇数和偶数节点顺序排列单链表的Java程序(1)

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

用于以交替奇数和偶数节点顺序排列单链表的Java程序

这个程序可以将一个单链表按照交替奇数和偶数节点的顺序进行排列,即将所有奇数节点按照原来的顺序放在一起,然后将所有偶数节点按照原来的顺序放在一起,最后将奇数节点和偶数节点按照顺序交替排列起来。

算法描述

假设原来的链表为L,将L中所有奇数节点链接成一个新的链表LOdd,将L中所有偶数节点链接成一个新的链表LEven,然后将LOdd和LEven交替排列起来即可。

为了实现这个算法,我们可以使用两个指针,一个指向LOdd,一个指向LEven,然后依次交替遍历LOdd和LEven,将它们链接成一个新链表,即为最终结果。

代码实现

以下是基于Java实现的代码:

public ListNode oddEvenList(ListNode head) {
    if (head == null || head.next == null) {
        return head;
    }
    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;
}

其中,ListNode是单链表的节点定义。odd指针指向奇数节点,even指针指向偶数节点,evenHead指针指向偶数节点的头节点。在while循环中,每次让odd指针指向下一个奇数节点,even指针指向下一个偶数节点,直到链表末尾。最后将odd指针指向偶数节点的头节点,即为最终结果。

测试用例

以下是一些测试用例:

  • 空链表:null
  • 只有一个节点:1
  • 只有两个节点:1 -> 2
  • 六个节点:1 -> 2 -> 3 -> 4 -> 5 -> 6
  • 八个节点:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8
总结

这个程序实现了以交替奇数和偶数节点顺序排列单链表的功能,通过将所有奇数节点链接成一个新的链表,将所有偶数节点链接成一个新的链表,最后将它们交替排列起来。这个程序的时间复杂度为O(n),空间复杂度为O(1),是比较高效的算法。