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

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

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

  • 先构建(构建就是不断的找前驱,并且添加新的节点)
  • 再删除(在头节点前面添加了一个dummy节点,主要是统一删除头节点时的操作)
import java.util.*;

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

public class Main{
    
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        // 构建链表
        ListNode head = new ListNode(scanner.nextInt());
        for(int i=1;i<n;i++){
            int addVal = scanner.nextInt(); //表示插入节点
            int preVal = scanner.nextInt(); //表示插入节点的前驱节点
            ListNode p = head;
            // 在链表中寻找前驱节点
            while(p!=null){
                if(p.val==preVal){
                    break;
                }
                p = p.next;
            }
            // 寻找到之后将addVal插入到前驱节点之后
            ListNode addNode = new ListNode(addVal,p.next);
            p.next = addNode;
        }
        int delVal = scanner.nextInt();
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode p = head, pre = dummy;
        while(p!=null){
            if(p.val == delVal){
                pre.next = p.next;
                p=p.next;
            }else{
                p=p.next;
                pre = pre.next;
            }
        }
        head = dummy.next;
        p = head;
        StringBuilder ans = new StringBuilder();
        while(p!=null){
            ans.append(p.val).append(" ");
            p = p.next;
        }
        ans.deleteCharAt(ans.length()-1);
        System.out.println(ans.toString());
    }
    
}
全部评论

相关推荐

03-11 21:46
西北大学 Java
河和静子:这只是实习工资,我学长北大通班博一的,他同学被这家天天发邮件让他去实习,一个月10w
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务