题解 | #从单向链表中删除指定值的节点#最最最贴近题干含义

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

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

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        String[] split = s.split(" ");
        int num = Integer.parseInt(split[0]);//链表结点个数
        ListNode nodeHead = new ListNode(Integer.parseInt(split[1]));
        ListNode temp;
        for (int i = 2; i < split.length - 1; i++) {
            //从字符串下标为2开始,每隔两个都是我们要新建结点的val值
            ListNode node = new ListNode(Integer.parseInt(split[i]));
            if (i == 2) {
                nodeHead.next = node;
                i++;
            } else {
                //比如2->3->1之间要在3后面插入4
                temp = nodeHead;
                //找到与i+1位置处等val值的结点存储为临时的temp
                while (temp.val != Integer.parseInt(split[i + 1])) {
                    temp = temp.next;
                }
                //
                if (temp.next != null) {
                    node.next = temp.next;
                    temp.next = node;
                } else {
                    //如果在最后一个节点后面插入就不用先让node指向前面节点的next
                    temp.next = node;
                }
                i++;
            }
        }
        //至此,完成了链表的最终形态,下一步就是删除节点,由于有结点总个数,从前往后遍历即可

        int removeVal = Integer.parseInt(split[split.length -
                                               1]);//要删除的结点val值

        //首结点就是要删除掉的那么首结点变成下一个结点
        if (nodeHead.val == removeVal) {
            nodeHead = nodeHead.next;
        } else {
            temp = nodeHead;
            for (int i = 1; i < num; i++) {//num是已知的结点总个数
                if (temp.next.val == removeVal) {
                    temp.next = temp.next.next;
                } else {
                    temp = temp.next;
                }

            }
        }

        temp = nodeHead;
        while (temp.next != null) {
            System.out.print(temp.val + " ");
            temp = temp.next;
        }
        System.out.print(temp.val);
        scanner.close();
    }
}
class ListNode {
    int val;
    ListNode next;

    public ListNode(int val) {
        this.val = val;
    }

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

全部评论

相关推荐

点赞 评论 收藏
分享
认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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