题解 | #从单向链表中删除指定值的节点#

从单向链表中删除指定值的节点

https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        // while (in.hasNextInt()) { // 注意 while 处理多个 case
        //     int a = in.nextInt();
        //     int b = in.nextInt();
        //     System.out.println(a + b);
        // }
        int n = in.nextInt();
        int[] arr = new int[2 * n];
        int index = 0;
        while (index < 2 * n) {
            arr[index] = in.nextInt();
            index++;
        }

        Node head = new Node(arr[0]);
        for (int i = 1; i < 2 * n - 1; i++) {
            if (arr[i] == head.v) {
                // Node second = find(head, arr[i - 1]);
                Node second = new Node(arr[i - 1]);
                second.next = head.next;
                head.next = second;
            } else if (i % 2 == 0) {
                Node pre = find(head, arr[i]);
                Node next = find(head, arr[i - 1]);
                if (pre == null && next == null) {
                    pre = new Node(arr[i]);
                    next = new Node(arr[i - 1]);
                    pre.next = next;
                } else if (pre == null && next != null) {
                    Node oldPre = findPre(head, next.v);
                    pre = new Node(arr[i]);
                    oldPre.next = pre;
                    pre.next = next;
                } else if (pre != null && next == null) {
                    next = new Node(arr[i - 1]);
                    next.next = pre.next;
                    pre.next = next;
                } else if (pre != null && next != null) {
                    Node oldPre = findPre(head, next.v);
                    oldPre.next = next.next;
                    next.next = pre.next;
                }
            }
        }

        Node node = head;
        while (node != null) {
            if (arr[2 * n - 1] == node.v) {
                node = node.next;
                continue;
            }
            System.out.print(node.v + " ");
            node = node.next;
        }
    }
    private static Node find(Node head, int v) {
        Node node = head;

        while (node != null) {
            if (node.v == v) {
                return node;
            } else {
                node = node.next;
            }
        }
        return null;
    }

    private static Node findPre(Node head, int v) {
        Node node = head;

        while (node != null) {
            if (node.next.v == v) {
                return node;
            } else {
                node = node.next;
            }
        }
        return null;
    }
}

class Node {
    int v;
    Node next;

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

全部评论

相关推荐

10-10 16:30
济宁学院 Java
一表renzha:面试官:蓝桥杯三等奖?你多去两次厕所都能拿二等吧
点赞 评论 收藏
分享
09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务