按奇偶拆分单链表
给定一个带头结点的单链表 C
,其节点按顺序排列为 {a1, b1, a2, b2, ..., am, bn}
,目标是将其拆分为两个链表:
- 链表
A
:包含所有奇数位置的节点{a1, a2, ..., am}
,保持原有顺序。 - 链表
B
:包含所有偶数位置的节点{bn, ..., b2, b1}
,顺序与原链表相反。
例如,给定链表 C: a1 -> b1 -> a2 -> b2 -> a3 -> b3
,拆分后:
A
变为a1 -> a2 -> a3
B
变为b3 -> b2 -> b1
1. 算法思想
为了实现按奇偶拆分并反转偶数位置的节点顺序,算法采用双指针法和尾插法与头插法相结合的方式。具体步骤如下:
初始化:
- 创建两个新的头结点
A
和B
,分别用于存储奇数位置和偶数位置的节点。 - 使用指针
p
指向当前遍历的节点,初始时指向C
的第一个有效节点。 - 使用指针
ra
指向链表A