力扣 203. 移除链表元素

力扣 203. 移除链表元素

image.png

image.png

有个处理链表的技巧,在待处理的链表头加上一个自己设计的头。这个头指向原来链表的头部。

定义一个自己的头节点s,s.next 指向原来链表的头部,这样就不用另外考虑链表的头部元素是val这种特殊情况。然后定义两个结点a和b,初始化a指向s,b指向s.next。b用来遍历每个节点。通过a,b两个结点,可以让被b的前一个元素的next指向b.next。如果最后一个元素的值是val,这种情况不需要特殊处理。

最后return返回的是s.next,不能返回head,如果这个head.val==val,返回head就没法删除值为val的结点。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        if(head==null){
            return head;
        }
        ListNode s=new ListNode(-1,head);
        ListNode a=s, b=s.next;
        while(b!=null){
           if(b.val==val){
               a.next=b.next;
               b=a.next;
           } else {
               a=a.next;
               b=b.next;
           }
        }
        return s.next;
    }
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注