良い...
入力が 2 つのノードだけの場合、リンク リストの 2 つの半分でそれ自体を呼び出すことにより、リンク リストを受け入れて反転する再帰を使用できます。
これは非常に非効率的ですが、O(nlog(n)) だと思います...
疑似コードで次のようなもの ( len
O(n) でリストの長さを返すsub_list(list, start_id, end_id)
関数と、O(N) で start_id で始まり end_id で終わるリストのサブセットを返す関数があると仮定します):
function invert(list)
if len(list) == 1 return list
if len(list) == 2:
new_list = list.next
new_list.next = list
return new_list
middle_of_list = len(list) / 2 <-- integer division
first_half = invert ( sub_list(list, 1, middle_of_list) )
second_half = invert ( sub_list(list, middle_of_list+2, len(list) )
first_half.next = second_half
return first_half