zoukankan      html  css  js  c++  java
  • Cracking the coding interview--Q2.4

    Write code to partition a linked list around a value x, such that all nodes less than x
    come before alt nodes greater than or equal to.

    分割一个链表,将值小于x的节点全部放在其他节点的前面。

    解答:

    我们可以创建两个不同的链表,其中一个用来连接比x小的节点,另外一个则连接大于等于x的节点,然后合并两个链表即可。

    public class Main {
        public static void appendToTail(List head, int d) {
            List end = new List(d);
            List n = head;
            while (n.next != null) {
                n = n.next;
            }
            n.next = end;
        }
    
        public static void print(List head) {
            List n = head;
            System.out.print("{");
            while (n != null) {
                if (n.next != null)
                    System.out.print(n.data + ", ");
                else
                    System.out.println(n.data + "}");
                n = n.next;
            }
        }
    
        public static List partition(List head, int x) {
            List small = null;
            List large = null;
            List largeHead = null;
            List smallHead = null;
            while (head != null) {
                List next = head.next;
                head.next = null;
                if (head.data < x) {
                    if (small == null) {
                        small = head;
                        smallHead = small;
                    } else {
                        small.next = head;
                        small = small.next;
                    }
                } else {
                    if (large == null) {
                        large = head;
                        largeHead = large;
                    } else {
                        large.next = head;
                        large = large.next;
                    }
                }
                head = next;
            }
            if(small == null) 
            {
                return largeHead;
            }
            small.next = largeHead;
            return smallHead;
        }
    
        public static void main(String args[]) {
            List list = new List(0);
            appendToTail(list, 9);
            appendToTail(list, 8);
            appendToTail(list, 7);
            appendToTail(list, 6);
            appendToTail(list, 5);
            appendToTail(list, 4);
            appendToTail(list, 3);
            appendToTail(list, 2);
            appendToTail(list, 1);
            print(list);
            print(partition(list, 5));
        }
    }
    
    class List {
        int data;
        List next;
    
        public List(int d) {
            this.data = d;
            this.next = null;
        }
    
        public List() {
        }
    }
  • 相关阅读:
    POJ1034 The dog task
    POJ1033 Defragment
    POJ1032 Parliament
    POJ1031 Fence
    POJ1030 Rating
    POJ1029 False coin
    伪元素的使用
    伪元素选择器:before 以及 :after
    jquery html() 和text()的用法
    用CSS绘制三角形
  • 原文地址:https://www.cnblogs.com/giraffe/p/3210364.html
Copyright © 2011-2022 走看看