LeetCode203删除链表中指定的节点

/**
 * 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) {
        //判断头节点是否为空,是不是需要删除的元素 是的话删除后下一个节点是不是空 是不是需要删除
        //头节点特殊 没有前一个节点
       while(head !=null && head.val == val){
           ListNode delNode = head;
           head = head.next;
           delNode.next = null;
       }
        if(head == null){
            return null;
        }else{
            //定义待删除节点的前一个节点,因为这里的头结点经过前面的逻辑 一定不是待删除节点
            ListNode prev = head;
            //遍历链表
            while(prev.next != null){
                //判断prev 后面的一个节点是不是待删除节点
                if(prev.next.val == val){
                    //将待删除节点的前一个节点中的next的引用指向的地址改为 待删除节点中next保存的引用指向的地址
                    ListNode delNode = prev.next;
                    prev.next = delNode.next;
                    delNode.next = null;
                }else{
                    //如果不是待删除元素  遍历后面的节点 prev往后移
                     prev = prev.next;
                }
            }
        }
        return head;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42664961/article/details/86669015