【数据结构与算法】链表的分割

需求分析:

        将链表分为两个部分在X前是小于X的,在X后是大于X的。只需要分割不需要排序。

实现思路:

        通过从头节点开始遍历,判断小于X的放入一条链表种,大于X的放入另一个链表中,最后将两条链表相连,X置于两条链表相连的中点,如果链表中没有X则添加一个X节点。

实现方法:

/**
 * 链表的分割
 * @param node 传入头节点
 * @param x 分割数
 * @return
 */
public static Node partition(Node node, int x) {
        Node linked1 = new Node(0);
        Node linked2 = new Node(0);

        Node curr1 = linked1;
        Node curr2 = linked2;

        Node head = node;
        Node nodeX = null;
        while (head != null) {
            if (head.val < x) {
                curr1.next = head;
                curr1 = curr1.next;
            } else if (head.val > x) {
                curr2.next = head;
                curr2 = curr2.next;
            } else {
                nodeX = head;
            }
            head = head.next;
        }if (nodeX==null){
            nodeX=new Node(4);
        }
        curr1.next = nodeX;
        nodeX.next = linked2.next;
        curr2.next = null;
        return linked1.next;
    }

    //链表的节点类
    public static class Node {
        private int val;
        private Node next;

        public Node(int val) {
            this.val = val;
        }
    }

测试:

public static void main(String[] args) {
        Node node1 = new Node(1);
        Node node2 = new Node(3);
        Node node3 = new Node(5);
        Node node4 = new Node(7);
        Node node5 = new Node(6);
        Node node6 = new Node(4);
        Node node7 = new Node(2);


        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;
        node5.next = node6;
        node6.next = node7;

        System.out.print("分割前:");
        Node head1 =node1;
        while (head1 != null) {
            System.out.print(head1.val);
            head1 = head1.next;
        }
        System.out.println();
        System.out.print("分割后:");

        Node head2 = partition(node1, 4);
        while (head2 != null) {
            System.out.print(head2.val);
            head2 = head2.next;
        }
    }

测试结果:

【数据结构与算法】链表的分割_第1张图片

你可能感兴趣的:(链表,数据结构,链表分割,算法)