删除链表中等于给定值 val 的所有节点
删除链表中等于给定值 val 的所有节点:
输入: 1->2->6->3->4->5->6 (val = 6)
输出: 1->2->3->4->5
思路:
1.需要一个新的链表,并且是一个空链表
ListNode prev = null;
2.遍历原来的链表
Node cur = head;
while(cur != null){
cur = cur.next;
}
3. 当 cur.val = val 时,
<1>.cur = head,head = cur.next;//如果是第一个结点,先避开第一个结点
<2>.cur != head,prev.next = cur.next;
当 cur.val != val 时,
prev = cur;
4.cur = cur.next;
1.判断如果是第一个结点,特殊处理
2.先避开第一个结点,回头再说
3.强行给第一个结点找一个前驱
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode prev = null;
ListNode cur = head;
while (cur != null) {
if (cur.val == val) {
if (cur == head) {
head = cur.next;
} else {
prev.next = cur.next;
}
} else {
prev = cur;
}
cur = cur.next;
}
return head;
}
}