【题目】
给定一个单链表的头节点head,节点值类型是整型,在给定一个整数pivot,实现一个调整链表的函数,将链表调整为,左边部分是小于pivot的节点,中间是等于的,右侧是大于的
【要求】
调整后节点之间的相对顺序与调整前一致,时间复杂度O(N),空间复杂度O(1)
【思路】
准备3个链表,小于pivot数值的,放在小链表中,等于的放在相等的链表中,大于的放在大链表中。每个链表只需头节点和尾节点即可,3个链表需要6个变量,只需要遍历一次单链表即可,满足题目要求
private static Node listPartition2(Node head, int pivot){
Node sH = null;//小链表的头节点
Node sT = null;//小链表的尾节点
Node eH = null;//相等链表的头节点
Node eT = null;//相等链表的尾节点
Node bH = null;//da链表的头节点
Node bT = null;//大链表的尾节点
Node cur = head;
while (cur != null){
Node next = cur.next;
cur.next = null;
if (cur.value < pivot){
if (null == sH){
sH = cur;
sT