|  | @@ -0,0 +1,29 @@
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Definition for singly-linked list.
 | 
	
		
			
				|  |  | + * type ListNode struct {
 | 
	
		
			
				|  |  | + *     Val int
 | 
	
		
			
				|  |  | + *     Next *ListNode
 | 
	
		
			
				|  |  | + * }
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +func oddEvenList(head *ListNode) *ListNode {
 | 
	
		
			
				|  |  | +	if head == nil || head.Next == nil {
 | 
	
		
			
				|  |  | +		return head
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	odd, even := head, head.Next
 | 
	
		
			
				|  |  | +	prev, slow, fast := odd, odd, even
 | 
	
		
			
				|  |  | +	for fast != nil && slow != nil {
 | 
	
		
			
				|  |  | +		slow.Next = fast.Next
 | 
	
		
			
				|  |  | +		if fast.Next != nil {
 | 
	
		
			
				|  |  | +			fast.Next = fast.Next.Next
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		fast = fast.Next
 | 
	
		
			
				|  |  | +		prev = slow
 | 
	
		
			
				|  |  | +		slow = slow.Next
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if slow == nil {
 | 
	
		
			
				|  |  | +		prev.Next = even
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		slow.Next = even
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return odd
 | 
	
		
			
				|  |  | +}
 |