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

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

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 n = in.nextInt(); //节点个数
            ListNode head = new ListNode(in.nextInt());
            //后续输入总是两个节点为一组,共n-1组,1表示头结点
            for(int i = 0; i < n-1; i++){
                ListNode secondNode = new ListNode(in.nextInt());
                int firstKey = in.nextInt();
                //遍历链表找firstNode的位置
                ListNode node = head;
                while(node != null && node.key != firstKey){
                    node = node.next;
                }
                secondNode.next = node.next;
                node.next = secondNode;
            }
            //结束,获取要删除的节点
            int removeKey = in.nextInt();
            //设置虚拟头结点
            ListNode dummyHead = new ListNode(-1, head);
            ListNode node = dummyHead;
            while(node.next != null && node.next.key != removeKey){
                node = node.next;
            }
            node.next = node.next.next; //删除node.next节点
            //输出链表数据
            ListNode iterator = dummyHead.next;
            while(iterator != null){
                System.out.print(iterator.key + " ");
                iterator = iterator.next;
            }
        }
    }
}

//时间复杂度: O(n^2)

//节点类 - 单向链表
class ListNode{
    int key;
    ListNode next;
    ListNode(int key){
        this.key = key;
        this.next = null;
    }

    ListNode(int key, ListNode next){
        this.key = key;
        this.next = next;
    }
}

全部评论

相关推荐

废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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