给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
// An highlighted block class Solution { fun partition(head: ListNode?, x: Int): ListNode? { var l1 : ListNode = ListNode(1) //设置哨兵节点 var root = l1 l1.next = head var prefix : ListNode ?= null while (l1.next != null) { if (l1.next.`val` >= x ) {//找出第一个大于等于x的值,prefix指向该值得前一个节点 if (prefix == null) { prefix = l1 } l1 = l1.next } else { var temp : ListNode = l1.next ?: break//定义一个temp指向小于X的节点,同时判断l1是否走到链表最后 if (prefix == null) {//如果prefix为null,说明还没有找到大于等于x的值,直接向后遍历 l1 = l1.next continue } l1.next = l1.next.next ?: null//需要跳过temp节点,因此temp将会移动到前面去 if ( prefix != null) { temp.next = prefix.next prefix.next = temp prefix = temp } } } return root.next } }
// An highlighted block class Solution { fun partition(head: ListNode?, x: Int): ListNode? { var SmallHead : ListNode = ListNode(0) var LargeHead : ListNode = ListNode(0) var small = SmallHead var large = LargeHead var index = head while (index != null) { if (index.`val` < x) { small.next = index index = index.next small = small.next small.next = null } else { large.next = index index = index.next large = large.next large.next = null } } small.next = LargeHead.next return SmallHead.next } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)