1292. Odd Even Linked List
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes.
样例
Example:
Given 1->2->3->4->5->NULL
,
return 1->3->5->2->4->NULL
.
注意事项
The relative order inside both the even and odd groups should remain as it was in the input.
The first node is considered odd, the second node even and so on ...
解题思路:
两种实现思路:
一种是移动奇偶结点,每次移动两格,当遇到尾结点为奇结点时,特殊处理。
另一种是设置一个变量,记录奇偶,遍历链表,is_odd = not is_odd。
#on my way
class Solution:
"""
@param head: a singly linked list
@return: Modified linked list
"""
def oddEvenList(self, head):
# write your code here
if head is None:
return head
odd, even = ListNode(0), ListNode(0)
odd_pre, even_pre = odd, even
pre, cur = head, head.next
while pre.next:
odd_pre.next = pre
even_pre.next = cur
odd_pre = odd_pre.next
even_pre = even_pre.next
pre = pre.next.next
if pre is None:
break
cur = pre.next
if pre and pre.next is None:
odd_pre.next = pre
odd_pre = odd_pre.next
even_pre.next = None
odd_pre.next = even.next
return odd.next
class Solution:
"""
@param head: a singly linked list
@return: Modified linked list
"""
def oddEvenList(self, head):
# write your code here
odd_head = odd = ListNode(0)
even_head = even = ListNode(0)
is_odd = True
while head:
if is_odd:
odd.next = head
odd = odd.next
else:
even.next = head
even = even.next
is_odd = not is_odd
head = head.next
even.next = None
odd.next = even_head.next
return odd_head.next