📅  最后修改于: 2023-12-03 14:56:19.131000             🧑  作者: Mango
这是一个Python程序,用于交替拆分给定单链表。它可以将一个单链表按照奇偶性拆分成两个单链表。
下面是完整的Python代码片段:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def oddEvenList(head: ListNode) -> ListNode:
if not head: # head为空时,返回None
return None
# 创建两个单链表:odd和even
odd, even = head, head.next
# 分别指向odd和even的最后一个节点,方便后面拼接
odd_tail, even_tail = odd, even
while even_tail and even_tail.next:
# odd_tail的next指向even_tail的next
odd_tail.next = even_tail.next
# 移动odd_tail指针到下一个位置
odd_tail = odd_tail.next
# even_tail的next指向odd_tail的next
even_tail.next = odd_tail.next
# 移动even_tail指针到下一个位置
even_tail = even_tail.next
# 拼接两个单链表
odd_tail.next = even
return odd
这个程序使用了两个指针 odd
和 even
来分别代表奇数和偶数单链表的头节点。
odd_tail
和 even_tail
初始时指向 odd
和 even
的头节点,用来指向每个单链表的最后一个节点。
程序使用 while
循环来遍历单链表,当遍历到最后一个偶数节点时退出循环。在循环中,程序将奇数节点的 next
指向下一个偶数节点,然后将偶数节点的 next
指向下一个奇数节点。这个过程可以用下面的图来表示:
原始单链表:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> None
^
|
循环第一次后:1 -> 3 -> 2 -> 4 -> 5 -> 6 -> 7 -> 8 -> None
^
|
循环第二次后:1 -> 3 -> 5 -> 2 -> 4 -> 6 -> 7 -> 8 -> None
^
|
循环第三次后:1 -> 3 -> 5 -> 7 -> 2 -> 4 -> 6 -> 8 -> None
在循环结束后,程序将奇数单链表的最后一个节点的 next
指向偶数单链表的头节点,然后返回奇数单链表的头节点。
这个Python程序可以用来交替拆分给定单链表。它的核心思想是在遍历单链表的过程中,将奇数节点的 next
指向下一个偶数节点,然后将偶数节点的 next
指向下一个奇数节点。最后再将奇数单链表的最后一个节点的 next
指向偶数单链表的头节点即可。