🌟

LeetCode 328. Odd Even Linked List

2022/06/09に公開

問題

リストが与えられるので偶数番目のノード列が奇数番目のノード列の後ろに来るように編集してください。

ex. 1->2->3->4->5 => 1->3->5->2->4

解説

特に難しいことを考える必要はない。evenとoddの2つのリストを作ってodd->evenの順につないでheadを返せば良い。

if (head != null) {
	let even = head.next;
	let even_head = head.next;
	let odd = head;
	while (even != null && even.next != null) {
		odd.next = odd.next.next;
		even.next = even.next.next;
		odd = odd.next;
		even = even.next;
	}
	odd.next = even_head;
}
return head;

whileの継続条件がポイント。行きすぎず余らせず走査を終わらせたい。evenが終端か終端一歩あと(null)にいけば終了とする(even == null or even.next == null)。oddは必ずevenの一歩手前にいるのでevenの終了条件だけで見ていれば良い。というわけでeven != null || even.next != null

最後にoddのリストにevenのリストをつなげるが、この時evenはevenのリストの終端にいるのであらかじめ保存しておいたeven_headを繋げて完成。

Discussion