寒光博客

[java]用基准值将链表分区
PartitionLinkNode 给定x为基准 将链表分割成两部分 所有小雨x的节点排在大于或等于x的节点之前 ...
扫描右侧二维码阅读全文
14
2019/10

[java]用基准值将链表分区

PartitionLinkNode

给定x为基准 将链表分割成两部分 所有小雨x的节点排在大于或等于x的节点之前
给定一个链表的头指针 Node* pHead 请返回重新排列后的链表的头指针

注意: 分割以后保持原来的数据顺序不变。
不要开辟新的空间

package _09_Linear;

public class PartitionLinkNode {
    static class Node {
        int value;
        Node next;

        Node(int value) {
            this.value = value;
        }
    }

    public static void main(String[] args) {
//        int arr[] = {3,4,2,5,6};
        int arr1[] = {5,6,3,2,1};
        Node head, p;
        head = new Node(-1);
        p = head;
        for (int i : arr1) {
            p.next = new Node(i);
            p = p.next;
        }
        new PartitionLinkNode().partition(head, 3);

        Node p1 = head.next;
        while (p1 != null) {
            System.out.println(p1.value);
            p1 = p1.next;
        }

    }

    public Node partition(Node pHead, int x) {
        Node p = pHead;
        Node leftFirst = null;//头指针
        Node leftTail = null;
        Node rightFirst = null;//头指针
        Node rightTail = null;
        while (p != null) {
            int pValue = p.value;
            if (pValue < x) {
                if (leftTail == null) {
                    leftFirst = p;
                    leftTail = p;
                } else {
                    leftTail.next = p;
                    leftTail = leftTail.next;
                }
            } else {//>= 所以x到最后了
                if (rightTail == null) {
                    rightTail = p;
                    rightFirst = p;
                } else {
                    rightTail.next = p;
                    rightTail = rightTail.next;
                }
            }
            p = p.next;
        }
        if (leftFirst == null)//左边链表可能为空
            return rightFirst;

        leftTail.next = rightFirst;//左右两个链表链接起来
        if (rightTail != null)
            rightTail.next = null;

        return leftFirst;
    }

}

本文作者:Author:     文章标题:[java]用基准值将链表分区
本文地址:https://dxoca.cn/java/293.html       百度未收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。
Last modification:October 15th, 2019 at 10:49 am
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment