问题描述:
328. 奇偶链表
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点
和偶数节点
指的是节点编号
的奇偶性
,而不是节点的值的奇偶性。
请尝试使用原地算法完成。你的算法的空间复杂度应为O(1)
,时间复杂度应为O(nodes)
,nodes
为节点总数。
示例 :
输入: 1->2->3->4->5->NULL
输出: 1->3->5->2->4->NULL
问题分析:
(1)把奇数位置的节点放到原来的链表
里面。
(2)偶数位置的连接分离出去
。
(3)把分离出去的偶数链表,连接到奇数链表上,即可。
Python3实现:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def oddEvenList(self, head):
if head == None:return None
odd, even = head, head.next
evenHead = even
while even != None and even.next != None:
odd.next = even.next # 奇数位置链表向后移动一个
odd = odd.next
even.next = odd.next # 偶数位置链表向后移动一个
even = even.next
odd.next = evenHead # 两个链表链接起来
return head
声明: 总结学习,有问题或不妥之处,可以批评指正哦。