【LeetCode 力扣 203】移除链表元素,删除链表中等于给定值 val 的所有节点。

学习目标:

目标:熟练运用Java数据结构所学知识


学习内容:

本文内容: 使用Java解决:移除链表元素


题目描述

删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

解题思路

  • 方法一:

首先这个题用到的删除链表结点的知识点,不一样的是需要删除所有val等于给定值的节点 ,所以需要在while循环里面嵌套 if 判断语句;
首先声明以下代码 取出头结点;

ListNode prev = head;

当prev.next不为null时进入while循环;
嵌套的 if 语句为 if (prev.next.val == val),代表找到了对应结点;

然后使用以下代码删除该结点

prev.next = prev.next.next;

  • 方法二:

可以创建傀儡结点,这样就不用将头结点和中间结点分开判断了

实现代码

  • 方法一:
 public static Node delete(Node head, int val) {
    
    
        if(head==null){
    
    
            return null;
        }

        ListNode prev = head;
        //当前结点的下一个结点不为空时
        while (prev.next != null) {
    
    
        //下一个结点的val等于给定值时
            if (prev.next.val == val) {
    
    
                prev.next = prev.next.next;//删除该节点
            }else{
    
    
                prev = prev.next;
            }

        }
        //判断头结点的val是不是给定值,如果等于给定值,则删除头结点
        if(head.val==val){
    
    
            head=head.next;
        }
        return head;
    }

  • 方法二:
    public static ListNode removeElements(ListNode head, int val) {
    
    
       ListNode dummy = new ListNode(0);//傀儡结点
       dummy.next = head;
       ListNode prev = dummy;
       ListNode cur = head;
       while (cur != null) {
    
    
           if (cur.val == val)
               prev.next = cur.next;//删除结点
           else
               prev = cur;
           cur = cur.next;
       }
       return dummy.next;
       }

猜你喜欢

转载自blog.csdn.net/zhangxxin/article/details/113666451