领扣——203.移除链表元素

领扣——203.移除链表元素

删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

/**
 * 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) {
    //不要被head符号迷惑了,第一个循环是删除值为val的节点,直到第一个不为val的出现,如果都是val,则返回的head为空,否则第一个不为val的出现了,思想是用双指针来操作,碰到有val的节点直接将前一个节点的next指向下下个,也就是不为val的那个,再移动curr指针,指到现在这个节点,如果没有碰到val值,就移动两个指针,直到curr为空。
        while(head!=null&&head.val==val)
           head=head.next;
        if(head==null)
            return head;
        ListNode pre=head;
        ListNode curr=head.next;
        while(curr!=null){
            if(curr.val==val){
                pre.next=curr.next;
                curr=curr.next;
            }else{
                pre=curr;
                curr=curr.next;
            }
        }
        return head;
    }
}

猜你喜欢

转载自blog.csdn.net/u010651249/article/details/83834376