【linked list】Leetcode 203: Remov
2019-11-27 本文已影响0人
周宇盛
https://leetcode.com/problems/remove-linked-list-elements
和常规的删除一个node的情况不同的是,它要求删除所有val为指定值的node。
这道题要注意一个点:
head node 的值是指定值,和中间node的值为指定值,在操作上不一样。比较好的办法是,在head前创建一个dummy node,那么这两种情况的操作就一样,最后返回的是 dummy.next。
思路:
- 由于要删除所有val为指定值的node,所以要遍历整个linked list,直到 p.next == null。
- 如果 p.next.val == val,那么就将此时p的后一个node删除;否则就将p继续往后移动;
/**
* 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 == null 的情况,以下代码返回结果仍然正确。
ListNode dummy = new ListNode(0), p = dummy;
dummy.next = head;
while(p.next != null) {
// if(p后一个值 == val),则将后一个node抛弃,也就是将p.next指向后2个node
// 否则,将p后移。也就是给p重新赋值,为p.next。
if(p.next.val == val) {
p.next = p.next.next;
} else {
p = p.next;
}
}
return dummy.next;
}
}