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

📅  最后修改于: 2023-12-03 14:56:19.389000             🧑  作者: Mango

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

本程序旨在将一个单链表按照交替的奇数和偶数节点顺序重新排列,即奇数节点出现在偶数节点之前。

实现思路

为了实现交替排列的效果,可以使用两个指针分别指向奇数节点和偶数节点的位置。遍历链表,将奇数节点和偶数节点分别连接起来即可。

具体实现步骤如下:

  1. 定义两个指针 oddeven,分别指向奇数节点和偶数节点的位置。
  2. 遍历链表,并维护两个变量 odd_taileven_tail,分别表示奇数节点和偶数节点的尾部。
  3. 利用 odd_taileven_tail 不断连接奇数节点和偶数节点。
  4. 最后将奇数节点的尾部与偶数节点的头部连接起来。
代码实现
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def alternate_odd_even(head):
    # 边界情况,当链表为空或只有一个节点时,直接返回链表的头部
    if not head or not head.next:
        return head

    odd = head
    even = head.next
    odd_tail = odd
    even_tail = even

    while even and even.next:
        odd_tail.next = even.next
        odd_tail = odd_tail.next
        even_tail.next = odd_tail.next
        even_tail = even_tail.next
        even = even.next.next

    odd_tail.next = even

    return head
使用示例
# 创建链表 1 -> 2 -> 3 -> 4 -> 5
head = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node5 = ListNode(5)
head.next = node2
node2.next = node3
node3.next = node4
node4.next = node5

# 执行函数以交替奇偶节点顺序排列链表
new_head = alternate_odd_even(head)

# 输出排列后的链表
current = new_head
while current:
    print(current.val, end=" -> " if current.next else "")
    current = current.next

以上程序可以使得原链表按照交替的奇数和偶数节点顺序重新排列,输出结果为:1 -> 3 -> 5 -> 2 -> 4。

注意:本程序仅适用于单链表,且链表节点值为整数类型。