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

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

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.hasNext()) { // 注意 while 处理多个 case
            //输入的第一个值:节点个数
            int n = in.nextInt();
            //输入的第二个值:头节点的值,其实是首元节点
            int headVal = in.nextInt();
            ListNode listNode=new ListNode(headVal);
           //辅助指针
            ListNode temp=listNode;            
            //输入的第3~倒数第2个数,共n-1(以偶数个数出现)个:各节点(除了头节点)的值
            for(int i=0;i<n-1;i++){
                //每次重置头指针
                ListNode head=listNode;
                int back=in.nextInt();
                int front=in.nextInt();
                //将back插在front的后面
                while(head!=null){
                    if(head.val==front){
                        ListNode node=new ListNode(back);
                        //插入front的后面
                        node.next=head.next;
                        head.next=node;
                        break;                        
                    }else{
                        head=head.next;
                    }
                }

            }
            ListNode mark=new ListNode(0);
            ListNode start=mark;
            //真正的头节点
            mark.next=temp;
            //输入的最后一个值:要删除的节点值
            int del=in.nextInt();
            //删除逻辑:双指针
            while(temp!=null){
                if(temp.val==del){
                    temp=temp.next;
                    mark.next=temp;
                }else{
                    temp=temp.next;
                    mark=mark.next;
                }
            }
            start=start.next;
            while(start!=null){
                System.out.print(start.val+" ");
                start=start.next;
            }

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

稍稍有点麻烦,别让指针绕晕了就行

全部评论

相关推荐

Twilight_mu:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
迟缓的斜杠青年巴比Q了:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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