203. 移除链表元素

链表算法题(程序员面试宝典)

解题思路主要来源于leetcode官方与《程序员面试宝典》。

203. 移除链表元素

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

示例:

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

解题方法

解题思路1

简单的链表删除操作。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode preNode = dummy;
        while(preNode.next!=null){
            if(preNode.next.val==val){
                //删除操作
                preNode.next = preNode.next.next;
            }else{
                preNode = preNode.next;
            }   
        }

        return dummy.next;
    }
}

在这里插入图片描述

解题思路2

递归思想。

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

        head.next = removeElements(head.next,val);
        if(head.val==val){
            //如果当前节点值==val,则返回其后继节点,以达到删除的目的
            return head.next;
        }
        return head;
    }
}

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页