LeetCode 203
203. 移除链表元素 - 力扣(LeetCode)
思路
原链表法
- 直接在原链表上优先处理完head的情况
- 如果节点为目标值,那么就用cur.next = cur.next.next删除该节点,因为此时head已经保证不是目标值了,所以从cur.next开始删除判断
- 如果节点不是目标值,那么就正常移动节点
虚拟头节点法
- 创建一个哨兵虚拟头节点dummyhead
- 所有节点都以cur.next = cur.next.next的逻辑进行处理,无需单独处理头节点
注意点
原链表法
- 返回值就为head
- 循环结束条件为cur != null && cur.next != null
虚拟头节点法
- 返回值为dummyhead.next,因为此时head可能已经被删除了
- 循环结束条件为cur.next != null
代码
原链表法
class Solution {
public ListNode removeElements(ListNode head, int val) {
//原链表法
if(head == null) {
return head;
}
while(head != null && head.val == val) { //处理头节点为目标值的情况
head = head.next;
}
ListNode cur = head;
while(cur != null && cur.next != null) {
if(cur.next.val == val) { //处理当前节点为目标值的情况
cur.next = cur.next.next;
} else {
cur = cur