LeetCode 86. 分隔链表
大家好,我是灵魂画师--茄子。技术水平一般,喜欢画画。
开始今天的正题。
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例 1:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
解法:
1.分割法
思路:
- 整体思路 设立两个链表 遍历head,比x小的存一个,比x大的存一个,把俩个链表拼接起来
注意点:设立的链表开头都是 -1 拼接的时候记得使用maxHead.next 把这个头节点忽略掉
let partition = function(head, x) {
let minHead = new ListNode(-1);
let minPoint = minHead;
let maxHead = new ListNode(-1);
let maxPoint = maxHead;
let p = head;
while(p){
if(p.val < x){
minPoint.next = p;
minPoint = minPoint.next;
} else {
maxPoint.next = p;
maxPoint = maxPoint.next;
}
p = p.next;
}
maxPoint.next = null
minPoint.next = maxHead.next; // 注意这里操作的是maxHead的next maxHead是 -1 -> ....
return minHead.next;
};
结合我的分析你是不是对这道题有了更清晰的认识了呢?
以上就是我的思路以及解法了,希望大家喜欢我画的图解,我会继续努力的ヾ(◍°∇°◍)ノ゙。(点个赞把我带走吧~~)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。