leetCode地址
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
官方思路:
- 初始化哨兵节点为 ListNode(0) 且设置 sentinel.next = head。
- 初始化两个指针 curr 和 prev 指向当前节点和前继节点。
- 当 curr != nullptr:
比较当前节点和要删除的节点:
若当前节点就是要删除的节点:则 prev.next = curr.next。
否则设 prve = curr。
遍历下一个元素:curr = curr.next。
- 返回 sentinel.next。
/**
* 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) {
if(head == null) return null;
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode p = newHead;
while(newHead.next != null){
if(newHead.next.val == val){
newHead.next = newHead.next.next;
}else{
newHead = newHead.next;
}
}
return p.next;
}
}