题解86: 分隔链表
给你一个链表的头节点
head和一个特定值x,请你对链表进行分隔,使得所有 小于x的节点都出现在 大于或等于x的节点之前。
示例:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
题意解读:
- 分隔,将链表依据给定的值(
x)进行大小分割排列,将小于x的节点放在大于或等于x的节点之前 - 既然是排列比较,那边需要对链表进行循环比较,将满足条件的节点依次向前移位
- 也可以完全进行递增排序也行
- 如若非必须可创建新链表进行对应存储
var partition = function (head, x){
if(!head) return null;
let bigList = new ListNode(), //创建两个新的链表分别存储大值和小值
smallList = new ListNode();
let bigNode = bigList, smallNode = smallList; //定义节点指向
let cur = head, next;
while(cur){
next = cur.next; //将cur.next赋给next指针,防止丢失
cur.next = null; //将cur.next指向为null,剥离出来单独操作
if(cur.val < x){ //节点值比较
smallNode.next = cur; //节点拼接,将smallNode节点next指向cur
smallNode = cur; //完成指向后,移动smallNode的节点指向,后移
}else{
bigNode.next = cur; //同上
bigNode = cur;
}
cur = next; //,改变节点指向,后移
}
smallNode.next = bigList.next; //进行链表拼接,bigList.next为首节点(要分清)
return smallList.next;
}
依次比较,依次分类添加(循环量表的时候采用
while循环,非空即继续)
👆 👆 以上就是个人对【分隔链表】的代码解法和方法解读。
迷惑重重,一看上头,一键三连哟!!!