LC203. 移除链表

链表定义:
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。
链接的入口节点称为链表的头结点也就是head。

java版本链表定义:

public class ListNode{
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val) { this.val = val; this.next = next; }
}

203. 移除链表元素

1、为什么要创建虚拟头结点:
如果不创建虚拟头结点:
除头结点外其他结点cur,满足cur.val == val条件时执行操作:

pre.next = cur.next;
cur = cur.next;

但是头结点head!=null && head.val == val时,要将头结点移除时,只需要执行head = head.next。
可以看到两者的操作不一致,头结点需要单独判断。
如果我们设置虚拟头结点,便不需要对头结点进行判断。注意:返回虚拟头结点dummy.next。
完整代码:

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        if (head == null) return head;
        ListNode dummy = new ListNode(-1, head);

        ListNode pre = dummy;
        ListNode cur = head;
        while (cur != null) {
            if(cur.val == val) {
                pre.next = cur.next;

            }else pre = cur;
            cur = cur.next;
        }
        return dummy.next;
    }
}

你可能感兴趣的:(Leecode,链表,数据结构,java)