题目
给你一个链表的头节点 head
和一个特定值 x
,请你对链表进行分隔,使得所有 小于 x
的节点都出现在 大于或等于 x
的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
1 2
| 输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5]
|
示例 2:
1 2
| 输入:head = [2,1], x = 2 输出:[1,2]
|
提示:
- 链表中节点的数目在范围
[0, 200]
内
-100 <= Node.val <= 100
-200 <= x <= 200
题解
思路依然是用空间换时间,那么就很清晰了,用两个链表,一个存放小于x
的数,一个存放大于x
的数,之后连接到一起即可。
代码应该是比较清晰的!(●ˇ∀ˇ●)
时间复杂度100%!叉腰.jpg!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public ListNode partition(ListNode head, int x) { ListNode cur = head; ListNode small = new ListNode(-101, null); ListNode smallCur = small; ListNode big = new ListNode(-101, null); ListNode bigCur = big; while (cur != null) { if (cur.val < x) { smallCur.next = new ListNode(cur.val, null); smallCur = smallCur.next; } else { bigCur.next = new ListNode(cur.val, null); bigCur = bigCur.next; } cur = cur.next; } smallCur.next = big.next; return small.next; } }
|