为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Java


class Solution {

    private static ListNode[] getArray(ListNode head) {

        if (head == null) {

            return new ListNode[0];

        }

        int size = 0;

        ListNode p = head;

        while (p != null) {

            ++ size;

            p = p.next;

        }

        ListNode[] result = new ListNode[size];

        p = head;

        size = 0;

        while (p != null) {

            result[size ++] = p;

            p = p.next;

        }

        return result;

    }

    private static ListNode getList(ListNode[] array) {

        if (array == null || array.length == 0) {

            return null;

        }

        ListNode head = array[0];

        ListNode pre = head;

        for (int i = 1;i < array.length; ++ i) {

            pre.next = array[i];

            pre = array[i];

        }

        pre.next = null;

        return head;

    }

    private static void swap(ListNode[] array, int a, int b) {

        if (a == b) {

            return;

        }

        ListNode t = array[a];

        array[a] = array[b];

        array[b] = t;

    }

    private static ListNode function(ListNode head, int val) {

        ListNode[] array = getArray(head);

        int size = array.length;

        int l = -1;

        int r = size - 1;

        int i = 0;

        while (i <= r) {

            if (array[i].val < val) {

                swap(array, ++ l, i ++);

            } else if (array[i].val == val) {

                ++ i;

            } else {

                swap(array, i, r --);

            }

        }

        return getList(array);

    }

    private static void print(ListNode head) {

        while (head != null) {

            System.out.println(head.val);

            head = head.next;

        }

    }

    public static void main(String[] args) {

        ListNode n1 = new ListNode(9);

        ListNode n2 = new ListNode(0);

        ListNode n3 = new ListNode(4);

        ListNode n4 = new ListNode(5);

        ListNode n5 = new ListNode(1);

        n1.next = n2;

        n2.next = n3;

        n3.next = n4;

        n4.next = n5;

        ListNode head = function(n1, 3);

        print(head);

    }

}

class ListNode {

    int val;

    ListNode next;

    ListNode(int x) { val = x; }

}

©著作权归作者所有:来自51CTO博客作者天一涯51CTO的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消