目录
题目要求
思路
代码展示
1.判断是否为空
2.删除除第一个外其他等于val的元素
3.处理第一个元素
4.整体展示(移除链表元素)
题目要求
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
思路
1. 判断head是否为空,为空的话直接返回空(链表的题基本上都要考虑是否为空)
2. 定义两个节点,一个在前(cur)一个在后(prev)(当cur.val == val 的时候,可以通过prev将后面的节点跳过这个节点连接到下一个节点)
3.友友们可以发现这样写的话,就没有判断第一个是否要删除,所以再单独判断第一个是否要删除
代码展示
1.判断是否为空
//判断是否为空 if(head == null) { return null; }
2.删除除第一个外其他等于val的元素
//删除除第一个外其他等于val的元素 ListNode prev = head; ListNode cur = head.next; while(cur != null) { if(cur.val == val) { prev.next = cur.next; cur = prev.next; } else { prev = prev.next; cur = cur.next; } }
3.处理第一个元素
//处理第一个元素 if(head.val == val) { head = head.next; }
4.整体展示(移除链表元素)
class Solution { public ListNode removeElements(ListNode head, int val) { //判断是否为空 if(head == null) { return null; } //删除除第一个外其他等于val的元素 ListNode prev = head; ListNode cur = head.next; while(cur != null) { if(cur.val == val) { prev.next = cur.next; cur = prev.next; } else { prev = prev.next; cur = cur.next; } } //处理第一个元素 if(head.val == val) { head = head.next; } return head; } }