📌  相关文章
📜  用于分离链表中偶数和奇数节点的 Javascript 程序

📅  最后修改于: 2022-05-13 01:57:44.264000             🧑  作者: Mango

用于分离链表中偶数和奇数节点的 Javascript 程序

给定一个整数链表,编写一个函数来修改链表,使所有偶数出现在修改后的链表中所有奇数之前。此外,保持偶数和奇数的顺序相同。
例子:

Input: 17->15->8->12->10->5->4->1->7->6->NULL
Output: 8->12->10->4->6->17->15->5->1->7->NULL

Input: 8->12->10->5->4->1->6->NULL
Output: 8->12->10->4->6->5->1->NULL

// If all numbers are even then do not change the list
Input: 8->12->10->NULL
Output: 8->12->10->NULL

// If all numbers are odd then do not change the list
Input: 1->3->5->7->NULL
Output: 1->3->5->7->NULL

方法一:
这个想法是获取指向列表最后一个节点的指针。然后从头节点开始遍历列表,将奇值节点从当前位置移动到列表末尾。
感谢 blunderboy 提出这种方法。
算法:

  1. 获取指向最后一个节点的指针。
  2. 将所有奇数节点移动到最后。
    • 考虑第一个偶数节点之前的所有奇数节点并将它们移动到末尾。
    • 将头指针更改为指向第一个偶数节点。
    • 考虑第一个偶数节点之后的所有奇数节点并将它们移动到末尾。
Javascript


Javascript


输出:

Original Linked list 0 2 4 6 8 10 11
Modified Linked list 0 2 4 6 8 10 11

时间复杂度: O(n)

方法二:
这个想法是将链表分成两部分:一个包含所有偶数节点,另一个包含所有奇数节点。最后,将奇数节点链表附加在偶数节点链表之后。
要拆分链表,遍历原始链表并将所有奇数节点移动到所有奇数节点的单独链表中。在循环结束时,原始列表将包含所有偶数节点,奇数节点列表将包含所有奇数节点。为了保持所有节点的顺序相同,我们必须在奇节点列表的末尾插入所有奇节点。为了在恒定时间内做到这一点,我们必须跟踪奇数节点列表中的最后一个指针。

Javascript


输出:

Original Linked List
0 1 4 6 9 10 11 
Modified Linked List
0 4 6 10 1 9 11 

时间复杂度: O(n)
有关详细信息,请参阅有关在链接列表中分离偶数和奇数节点的完整文章!