跳到主要内容

简述调整链表顺序使奇数位于偶数前面 ?

参考答案:

调整链表顺序使奇数位于偶数前面,可以采用以下两种方法:

方法一:

  1. 设定两个指针,p1和p2。p1指向链表的最后一个奇数位置,初始化为空;p2指向链表的当前位置,初始化为链表的头节点。
  2. 当p2不为空时,执行以下操作:
  • 如果p2指向的元素为奇数,将p2位置的元素与p1下一位置的元素交换,然后p1移动到下一个位置(p1 = p1->next)。
  • 如果p2指向的元素为偶数,p2直接移动到下一个位置(p2 = p2->next)。
  1. 重复步骤2,直到p2为空。

这种方法的时间复杂度为O(n),其中n为链表的长度。

方法二:

  1. 设定三个指针,odd、even和evenHead。odd指向当前奇数位置的元素,初始化为链表的头节点;even指向当前偶数位置的元素,初始化为链表的头节点的下一个节点;evenHead指向第一个偶数位置的元素,初始化为空。
  2. 当odd和even都不为空时,执行以下操作:
  • 将odd指向的元素与even指向的元素交换。
  • odd移动到下一个奇数位置(odd = odd->next->next)。
  • even移动到下一个偶数位置(even = even->next->next)。
  • 如果even为空,将evenHead指向odd。
  1. 如果odd不为空,将odd连接到evenHead之前。

这种方法也是将奇数位置的元素移动到偶数位置元素之前,但具体实现过程和方法一有所不同。这种方法的时间复杂度同样为O(n)。