Leetcode-每日一题【203.移除链表元素】

题目

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]


示例 2:

输入:head = [], val = 1
输出:[]


示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]

提示:

  • 列表中的节点数目在范围 [0, 104] 内
  • 1 <= Node.val <= 50
  • 0 <= val <= 50

解题思路

举个栗子:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

1.我们先设置一个新的虚拟头节点 newlist ,令 newlist.next = head ,

2.然后我们再设置一个 cur 节点,令 cur.next = newlist , 对链表进行遍历

3.若 cur.next.val == val ,则我们令  cur.next = cur.next.next ,否则令 cur = cur.next

4.注意这一步,因为 cur.next.val == val ,所以我们令  cur.next = cur.next.next,但是这个时候我们不能直接往下走,而是要进入下一次 while 再循环判断一次这个新连接的 cur.next.val 是否等于 val,若不等于我们再令  cur = cur.next ,要是不这么做如果新连接的节点的值也等于 val ,我们就会漏掉这个节点。

 5.此时 cur.next = null 我们返回 newlist.next 即可

代码实现

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode newlist = new ListNode(0);
        newlist.next = head;
        ListNode cur = newlist;
        while(cur.next != null){
            if(cur.next.val == val){
                cur.next = cur.next.next;
            }else{
                cur = cur.next;
            }
        }
        
        return newlist.next;

    }
}

测试结果

 

猜你喜欢

转载自blog.csdn.net/lucky_1314520/article/details/131593920