删除链表中的元素(迭代删除)
刚刚学习数据结构,在LeetCode中遇到一个删除链表中元素的题目 如下:
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-linked-list-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这道题一眼看起来是比较简单,但是有很多容易忽略的细节。
1.必须考虑是否头结点head是否是空` headnull,如果是空就返回head,不必再删除了
2.考虑第一个元素也就是head的元素的值是否val,head.val val;
如果是需要删除head 则直接令head成为head.next,注意:这里有一个细节是判断的时候必须使用while循环,而不是if判断,因为要考虑到前面连续几个全是待删值
3.在具体的操作过程中 ,else的判断非常重要是保证循环的关键,不能忽略
while(tamp.next!=null){
if(tamp.next.val == val){
tamp.next = tamp.next.next;//将这个节点赋为下一个节点,删除节点,并且继续循环
}else{
tamp= tamp.next;//如果没有找到,继续下一个寻找
}
这是我的代码
class Solution {
public ListNode removeElements(ListNode head, int val) {
while(head !=null && head.val ==val){//head不是空且head的值是待删值
head = head.next;//就是把head删掉
}
if(head == null){
return head;
}
ListNode tamp = head;
while(tamp.next!=null){
if(tamp.next.val == val){
tamp.next = tamp.next.next;//将这个节点赋为下一个节点,删除节点,并且继续循环
}else{
tamp= tamp.next;//如果没有找到,继续下一个寻找
}
}
return head ;//返回tamp节点
}
}