题目描述:
删除链表中等于给定值 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;
}
}