给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode temp = dummyHead;
while (temp.next != null) {
if (temp.next.val == val) {
temp.next = temp.next.next;
} else {
temp = temp.next;
}
}
return dummyHead.next;
}
}
- 链表的头节点
head
也有可能被删除,因此创建哑节点dummyHead
,令dummyHead.next=head
。 - 初始化一个temp节点:
temp=dummyHead
,temp的目的用来遍历链表,并进行删除操作。 - 最终返回
dummyHead.next
即为删除操作后的头节点。
用temp
表示当前节点。如果temp.next
不为空且temp.next.val == val
时,则要删除temp
的next
节点,实现:
temp.next=temp.next.next
image.png
- 时间复杂度:O(n),其中 n 是链表的长度。需要遍历链表一次。
- 空间复杂度:O(1)。
网友评论