[LeetCode]Partition List

来源:互联网 发布:switch网络一会b一会f 编辑:程序博客网 时间:2024/06/05 19:35

题目描述

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.

For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

给定一个链表和一个值x,对它进行分区,使得所有节点小于x的来到之前节点大于或等于x的那个节点。 你应该保持在每两个分区的节点的原始相对顺序。


解题思路


找到第一个大于或等于x的那个节点和在他前一个的节点,将小于x的节点全部移到他们俩之间。


代码


public static ListNode partition(ListNode head, int x) {ListNode loopNode = head;ListNode firstGreaterOrEqualXNode = null;ListNode beforeFirstGreaterOrEqualXNode = null;ListNode tempNode = null;ListNode result = head;//找到第一个大于或等于x的节点和它之前的那个节点while (loopNode != null && loopNode.val < x) {beforeFirstGreaterOrEqualXNode = loopNode;loopNode = loopNode.next;}firstGreaterOrEqualXNode = loopNode;if (loopNode != null) {while (loopNode.next != null) {if (loopNode.next.val < x) {tempNode = loopNode.next;loopNode.next = tempNode.next;if (beforeFirstGreaterOrEqualXNode != null) {//第一个大于或等于x的节点和它之前的那个节点之间插入节点beforeFirstGreaterOrEqualXNode.next = tempNode;} else {//如果第一个大于或等于x的节点是头节点的话result = tempNode;}tempNode.next = firstGreaterOrEqualXNode;beforeFirstGreaterOrEqualXNode = tempNode;} else {//如果当前节点大于x则继续循环loopNode = loopNode.next;}}}return result;}


0 0
原创粉丝点击