Exemplo n.º 1
0
func PartitionLinkedList(l *linkedlist.LinkedList, x int) {
	var ltroot, lessthan, gtroot, greaterthan *linkedlist.Node

	current := l.Root
	for current != nil {
		if current.Value < x {
			if ltroot == nil || lessthan == nil {
				ltroot = current
				lessthan = current
			} else {
				lessthan.Next = current
				lessthan = lessthan.Next
			}
		} else {
			if gtroot == nil || greaterthan == nil {
				gtroot = current
				greaterthan = current
			} else {
				greaterthan.Next = current
				greaterthan = greaterthan.Next
			}
		}

		current = current.Next
	}

	if l.Root != nil {
		if ltroot != nil && gtroot != nil {
			l.Root = ltroot
			l.Head = greaterthan
			lessthan.Next = gtroot
			greaterthan.Next = nil
		}
	}
}