0
点赞
收藏
分享

微信扫一扫

[每日一练] 移除链表元素 - 力扣(LeetCode)

Jonescy 2022-04-13 阅读 30

   

       

203. 移除链表元素https://leetcode-cn.com/problems/remove-linked-list-elements/

     

    

   

示例 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

   

解题思路

  • 小坑1,当链表为空不能删
  • 小坑2,头部为删除值很难处理(最后再判断)
  • 难点:定义两个指针,一个 cur (删除节点)在 head.next ,一个 prev (删除前驱)在 head 上,当cur在删除的值上时,令 prev.next=cur.next(删除元素),接着 cur=cur.next(向后走一步),若后面的值还是要删的,prev 不动,cur执行之前的操作,若不是,prev = cur (prev到cur位置),接着 cur.next(向后走一步),执行以上操作直到 cur.next 为 null 停止。

   

      

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
public class Solution {
    public ListNode removeElements(ListNode head, int val) {
        if(head==null){
            return null;
        }
        ListNode prev = head;
        ListNode cur = head.next;
        while(cur !=null){
            if(cur.val==val){
                prev.next = cur.next;
                cur = cur.next;
            }else{
                prev = cur;
                cur = cur.next;
            }
        }
        if(head.val == val){
           head = head.next;
        }
        return head;
    }
}

       

举报

相关推荐

0 条评论