题目描述:

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

示例:

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

解题思路:

算法:

  • 初始化哨兵节点为 ListNode(0) 且设置dummyhead.next = head。
  • 初始化两个指针 cur 和 pre 指向当前节点和前继节点。
  • 当 cur != nullptr:
  • 比较当前节点和要删除的节点:
  • 若当前节点就是要删除的节点:则 pre.next = cur.next。
  • 否则设 pre = cur。
  • 遍历下一个元素:curr = curr.next。
  • 返回 dummyhead.next。

java实现:

/**
 * 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) {
        
        ListNode cur=head;
        ListNode dummyhead=new ListNode(0);
        dummyhead.next=head;
        ListNode pre=dummyhead;
        while(cur!=null){
            if(cur.val==val){
                pre.next=cur.next;
                
            }else{
                pre=cur;
                
            }
            cur=cur.next;
        }
        return dummyhead.next;
    }
}