移除链表元素
删除链表中等于给定值 val 的所有节点
该题目来自力扣题库
示例
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
思路
链表删除元素,先删后面与被删除数字相同的节点(非头节点),之后判断是否要头删。
删非头节点,我们需要找到删除节点的前一个位置(prev),待删除节点是(cur)。最开始prev指向head,cur指向prev.next(也就是head.next),如果达到条件要删除的时候就是把cur.next赋给prev.next,同时不要忘记cur要指向下一个节点。
最后判断头节点是否要被删除,如果要删除,直接头删。
最后返回head
代码
/**
* 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) {
if(head==null){
return null;
}
ListNode prev=head;
ListNode cur=prev.next;
while(cur!=null){
if(cur.val==val){
prev.next=cur.next;
cur=prev.next;
}else{
prev=cur;
cur=cur.next;
}
}
if(head.val==val){
head=head.next;
}
return head;
}
}
总结
值得注意的一点是:一定要记得判断是不是空链表。
只要对一个引用进行成员访问操作,那么必须保证有效。引用时不能为空,要不然会抛出异常。