链表问题 删除a/b处节点

无要求,解决方法多种。

思路总结:

遍历得到链表长度,p.next = p.next.next。

收获:

强制类型转换,int a = (int) b;


public class Main {
    public static class Node {
        public int value;
        public Node next;
        public Node() { this.next = null; }; //初始化一个空链表
        public Node(int value) { this.value = value; }
    }

    public static Node CreatNewLinkedList(Node head, int[] a) {
        System.out.print("List is: ");
        Node r = head;
        for (int i : a) {
            Node p = new Node(i);
            r.next = p;
            p.next = null;
            r = r.next;
            System.out.print(p.value + " ");
        }
        System.out.println();
        return head;
    }//尾插法

    public static Node RemoveMiddleNode(Node node) {
        double Middle = 0;
        if (node == null || node.next == null) {
            return node;
        }
        Node p = node;
        while (p != null) {
            Middle++;
            p = p.next;
        }
        p = node;
        double Middle1 = Middle;
        Middle1 = Middle1 % 1;
        int Middle2 = (int) Middle; //强制类型转换
        Middle2 /= 2;
        if (Middle1 == 0) {
            while (Middle2-- != 1) {
                p = p.next;
            }
            p.next = p.next.next;
        }
        if (Middle1 == 0.5) {
            while (Middle2 != 0) {
                Middle2--;
                p = p.next;
            }
            p.next = p.next.next;
        }
        return node;
    }

    public static Node RemoveMiddleNode(Node node, int a, int b) {
        double length = 0;
        if (node == null || node.next == null) {
            return node;
        }
        Node p = node;
        while (p != null) {
            length++;
            p = p.next;
        }

        //System.out.println(length);

        p = node;
        double Deleteth = (double) a/b;
        if (Deleteth > 0 && Deleteth <= 1/length) {
            node = node.next;
        }
        for (int i = 1; i < (length - 1); i++) {

            p = p.next;
            if (Deleteth > i/length && Deleteth <= (i+1)/length) {
                p.next = p.next.next;
            }
        }
        if (Deleteth > (length - 1)/length && Deleteth <= 1) {
            p.next = null;
        }
        return node;
    }

    public static void PrintLinkedList(Node node) {
        System.out.print("List is: ");
        while (node != null) {
            System.out.print(node.value + " ");
            node = node.next;
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4, 5, 6, 8, 9, 10};

        Node head = new Node();

        CreatNewLinkedList(head, a);
        head = head.next;
        //System.out.println(head2.next.next.value);
        head = RemoveMiddleNode(head);
        PrintLinkedList(head);

        System.out.println("============");

        head = RemoveMiddleNode(head, 1, 8);
        PrintLinkedList(head);

    }
}

猜你喜欢

转载自blog.csdn.net/Rivalak/article/details/81089023