Leetcode328奇偶链表

这个是自己一开始自己想的,没有考虑原地操作,空间不是O(1)

ListNode *oddEvenList(ListNode *head)
{
	ListNode *p = head;
	ListNode *odd = new ListNode(INT_MIN);
	odd->next = nullptr;
	LsitNode *even = new ListNode(INT_MIN);
	even->next = nullptr;
	ListNode *e = even;
	ListNode *o = odd;
	int i = 1;
	while(p)
	{
		if(i % 2 == 0)
		{
			e->next = p;	
			e = e->next;
		}
		else
		{
			o->next = p; 
			o = o->next;
		}
		p = p->next;
		i++;
	}
	e->next = nullptr;
	o->next = even->next;
	return odd->next;
}

原地操作的话其实和分开两个链表的思想是一样的

ListNode* oddEvenList(ListNode* head)
{
	if(head == nullptr) return nullptr;
	ListNode *even = head->next;
	ListNode *odd = head;
	ListNode *s = even; 
	while(even != nullptr && even->next != nullptr)
	{
		odd->next = even->next;
		odd = odd->next;
		even->next = odd->next;
		even = even->next;	
	} 
	odd->next = s;
	return head;
}
posted @ 2020-07-12 19:19  Akmf's_blog  阅读(51)  评论(0)    收藏  举报