86. Partition List
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
Example:
Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func partition(head *ListNode, x int) *ListNode {
if head == nil {
return head
}
dummy := ListNode{Val: 0}
greaterDummy := ListNode{Val: 0}
greaterNode := &greaterDummy
lessNode := &dummy
node := head
for node != nil {
if node.Val < x {
lessNode.Next = node
lessNode = node
} else {
greaterNode.Next = node
greaterNode = node
}
//fmt.Println(lessNode.Val,greaterNode.Val)
node = node.Next
}
greaterNode.Next=nil
lessNode.Next = greaterDummy.Next
return dummy.Next
}