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

#牛客创作赏金赛# #刷题我是认真的#

核心思路:

  1. 主要考察链表的插入和删除
  2. 链表插入比较好搞,直接变更引用的执行即可
  3. 链表的插入需要注意删除头节点的时候,由于Java的传参也是传递的引用的副本,变更头节点引用时,需要重新赋值后的头节点返回
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        Node head = new Node(in.nextInt());
        while (in.hasNextInt() && n > 1) {
            int a = in.nextInt();
            int b = in.nextInt();
            insert(head, b, a);
            n--;
        }
        int delVal = in.nextInt();
        head = del(head, delVal);
        while (head != null) {
            System.out.print(head.val + " ");
            head = head.next;
        }
    }

    public static void insert(Node head, int i, int target) {
        Node tmp = head;
        while (tmp.val != i) {
            tmp = tmp.next;
        }
        Node newNode = new Node(target);
        newNode.next = tmp.next;
        tmp.next = newNode;
    }

    public static Node del(Node head, int target) {
        // 如果要删除的是头节点
        if (head.val == target) {
            head = head.next;
            return head;
        }
        Node tmp = head;
        Node pre = new Node(0);
        while (tmp.val != target) {
            pre = tmp;
            tmp = tmp.next;
        }
        pre.next = tmp.next;
        tmp.next = null;
        return head;
    }
}
class Node {
    int val;
    Node next;
    public Node(int val) {
        this.val = val;
    }
}

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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