leetcodeブラシのタイトル・ノート(のpython3) - 143並べ替えリスト。

143並べ替え一覧

単独リンクリストLを考える:L0→L1→...→LN-1→Lnは、
その順序を変更:L0→Lnは→L1→LN-1→L2→LN-2→...

あなただけ自体を変更することができるノードは、リストのノードの値を変更することはできません。

例1:

所与1-> 2-> 3-> 4、そのリオーダー1-> 4-> 2-> 3。
例2:

所与1-> 2-> 3-> 4-> 5に、リオーダー1-> 5> 2-> 4-> 3。

プランこれを行うために、逆挿入順序をトラバースすることであり、基本的な時間計算量はO(N)であります

func reorderList(head *ListNode)  {
	if head == nil || head.Next == nil {
		return
	}
	fast, slow := head, head
	for fast.Next != nil && fast.Next.Next != nil {
		fast = fast.Next.Next
		slow = slow.Next
	}
	mid := slow.Next
	slow.Next = nil
	tail := mid
	var preNode *ListNode = nil
	for tail != nil {
		n := tail.Next
		tail.Next = preNode
		preNode = tail
		tail = n
	}
	//reverse
	for head != nil && preNode != nil {
		n := head.Next
		head.Next = preNode
        preNode = preNode.Next
		head.Next.Next = n
		head = n
	}
}
公開された98元の記事 ウォンの賞賛0 ビュー1454

おすすめ

転載: blog.csdn.net/weixin_44555304/article/details/104420830