题目地址(203. 移除链表元素)

https://leetcode-cn.com/problems/remove-linked-list-elements/

题目描述

  1. 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
  2. 示例 1
  3. 输入:head = [1,2,6,3,4,5,6], val = 6
  4. 输出:[1,2,3,4,5]
  5. 示例 2
  6. 输入:head = [], val = 1
  7. 输出:[]
  8. 示例 3
  9. 输入:head = [7,7,7,7], val = 7
  10. 输出:[]
  11. 提示:
  12. 列表中的节点数目在范围 [0, 104]
  13. 1 <= Node.val <= 50
  14. 0 <= val <= 50

前置知识

  • 链表

公司

  • 暂无

思路

定义一个头结点 指向给定的节点 然后定义pre指向自己定义的头结点 cur指向后节点 也就是给定的head 当cur的val = 给定的val时 就让pre节点的next指向cur的next
cur指向cur.next 如果不等于的话就让pre = pre.next 最后返回自定义的头结点的next


  • 关键点

  • 定义一个头结点

    代码

  • 语言支持:Java

Java Code:

  1. public class ListNode {
  2. int val;
  3. ListNode next;
  4. ListNode() {}
  5. ListNode(int val) {this.val = val;}
  6. ListNode(int val,ListNode next) {
  7. this.val = val;
  8. this.next = next;
  9. }
  10. }
  11. class Solution {
  12. public ListNode removeElements(ListNode head, int val) {
  13. if (head == null) {
  14. return head;
  15. }
  16. ListNode touNext = new ListNode(-1, head);
  17. ListNode pre = touNext;
  18. ListNode cur = pre.next;
  19. while (cur != null) {
  20. if (cur.val == val) {
  21. pre.next = cur.next;
  22. } else {
  23. pre = cur;
  24. }
  25. cur = cur.next;
  26. }
  27. return touNext.next;
  28. }
  29. }

复杂度分析

令 n 为数组长度。

  • 时间复杂度:203. 移除链表元素 - 图1#card=math&code=O%28n%29&id=NMPnV)
  • 空间复杂度:203. 移除链表元素 - 图2