美文网首页
将单向链表按某值划分成左边小、 中间相等、 右边大的形式

将单向链表按某值划分成左边小、 中间相等、 右边大的形式

作者: shoulda | 来源:发表于2018-07-16 15:30 被阅读0次

    题目:将单向链表按某值划分成左边小、 中间相等、 右边大的形式
    思路:设置3个指针,然后遍历,在相连。

    public static class Node {
            public int value;
            public Node next;
    
            public Node(int data) {
                this.value = data;
            }
        }
    
    public static Node listPartition2(Node head, int pivot) {
            Node sH = null; // small head
            Node sT = null; // small tail
            Node eH = null; // equal head
            Node eT = null; // equal tail
            Node bH = null; // big head
            Node bT = null; // big tail
            Node next = null; // save next node
            // every node distributed to three lists
            while (head != null) {
                next = head.next;
                head.next = null;
                if (head.value < pivot) {
                    if (sH == null) {
                        sH = head;
                        sT = head;
                    } else {
                        sT.next = head;
                        sT = head;
                    }
                } else if (head.value == pivot) {
                    if (eH == null) {
                        eH = head;
                        eT = head;
                    } else {
                        eT.next = head;
                        eT = head;
                    }
                } else {
                    if (bH == null) {
                        bH = head;
                        bT = head;
                    } else {
                        bT.next = head;
                        bT = head;
                    }
                }
                head = next;
            }
            // small and equal reconnect
            if (sT != null) {
                sT.next = eH;
                eT = eT == null ? sT : eT;
            }
            // all reconnect
            if (eT != null) {
                eT.next = bH;
            }
            return sH != null ? sH : eH != null ? eH : bH;
        }
    

    相关文章

      网友评论

          本文标题:将单向链表按某值划分成左边小、 中间相等、 右边大的形式

          本文链接:https://www.haomeiwen.com/subject/znrbpftx.html