leetcode链表

70次阅读

共计 978 个字符,预计需要花费 3 分钟才能阅读完成。

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;
    }
}

正文完
 0