Problem
Remove all elements from a linked list of integers that have value val.
Example:
1 | Input: 1->2->6->3->4->5->6, val = 6 |
Analysis
这道题目是非常经典的链表删除操作。这类题目一般有两种做法:
- 找到要删除的元素,然后和后一个元素交换,改为删掉后一个元素的内存空间;
- 使用前后指针,
pre
指针在前,p
指针在后,p
指向要被删除的元素,最后删除掉p
指向的内存区域。
因为这道题目要删掉的元素可能有多个,而且可能存在于链表的尾部,如果使用第一种方法的话就需要考虑多个边界条件。所以这里使用第二种方法,但是第二种方法也有局限的地方——在第一个节点的时候没有pre
指针。这里为了代码的统一,我们可以手动在head
前面加入一个dummy节点。这样整个链表的遍历就统一了。
Solution
技巧就是在head
前加入一个dummy节点,pre
指向这个节点。
Code
1 | /** |
Summary
链表的删除是比较基础的知识点,但是很容易有null point的情况发生,所以在做这类题目的时候要特别注意判断指针是否为空。希望这篇博客能够帮助到您,感谢您的支持,欢迎转发、分享、评论,谢谢!