Leetcode 328. 奇偶链表 Python3实现
给定一个单链表,实现将所有的奇数节点和偶数节点分别排在一起,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!
Python3代码如下:
class Solution:
def oddEvenList(self, head):
# 首先判空
if not head:
return head
# 定义奇数链的指针
odd_p = head
# 定义偶数链的指针
even_p = head.next
# 之后头节点的next会指向下一个奇数节点,就找不到第一个偶数节点了,需要先记录下来
dummy_even = head.next
# 偶数节点或下一个奇数节点不为空时不断循环
# 要求偶数节点不为空是因为可能当前偶数节点为None(注意偶数节点的最后一个节点是可以为None的,但是在偶数链有节点时奇数节点不能为None,否则最终的结果会多一个None),None是没有next的(循环内部会报错),同时这种情况说明后面没有节点了,所以也不需要遍历了;
# 要求下一个奇数节点不为空是因为可能当前偶数节点不为空,但是下一个节点为None了,这种情况也不需要遍历了;
while even_p is not None and even_p.next is not None:
# 将当前奇数节点的next指向下一个奇数节点
odd_p.next = even_p.next
# 把奇数链的指针移动到下一个奇数节点处
odd_p = odd_p.next
# 将当前偶数节点的next指向下一个偶数节点(下一个奇数节点的next)
even_p.next = odd_p.next
# 把偶数链的指针移动到下一个偶数节点处
even_p = even_p.next
# 将奇数链的最后一个节点连接至偶数链的头节点
odd_p.next = dummy_even
# 返回head即可
return head