leetcode-链表

LeetCode Num.203

删除链表中等于给定值 val 的所有节点。
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

1.不使用虚拟头节点
public ListNode removeElements(ListNode head,int val)
    {
        //判断当天头元素是否是就是要删除的元素,是的话循环删除
        while(head != null && head.val == val) {
            ListNode delNode = head;
            head = head.next;
            delNode.next = null;
        }
        //可能链表中都是要删除的元素,删除完head指向空
        if(head == null) {
            return null;
        }
        //循环当前元素下一个元素是否是要删除的元素
        ListNode prev = head;
        while(prev.next != null) {
            if(prev.next.val == val) {
                ListNode delNode = prev.next;
                prev.next = delNode.next;
                delNode.next = null;
                //这里不需要prev = prev.next,因为经过调整后,符合下一次的循环逻辑
            }
            else {
                //如果当前元素的下一个元素不是要删除的元素,就继续往下遍历
                prev = prev.next;
            }
        }
        return head;
    }
2.使用虚拟头节点
class Solution
{
    public ListNode removeElements(ListNode head,int val)
    {
        //dummy 2 6 7 9 6
        ListNode dummyNode = new ListNode(-1);
        dummyNode.next = head;

        //循环当前元素下一个元素是否是要删除的元素
        ListNode prev = dummyNode;
        while(prev.next != null) {
            if(prev.next.val == val) {
                ListNode delNode = prev.next;
                prev.next = delNode.next;
                delNode.next = null;
                //这里不需要head = head.next,因为经过调整后,符合下一次的循环逻辑
            }
            else {
                //如果当前元素的下一个元素不是要删除的元素,就继续往下遍历
                prev = prev.next;
            }
        }
        return dummyNode.next;
    }
}

你可能感兴趣的