- 移除链表元素
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
通过次数122,522提交次数262,017
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-linked-list-elements/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:遍历
如果要删除的节点是中间节点,可以使用遍历,定义要删除节点的前一个节点为pre
,要删除节点为p
,让pre
的next
域指向p
的next
域即可。
如果要删除的节点是头结点,则pre
指向null
,让p
指向p
的next
域,由于头节点被删除,所以还需要更新头结点。
代码示例:
/**
* 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) {
ListNode p = head;
ListNode pre = null;
while (p != null) {
// 要删除的节点是头节点
if (pre == null && p.val == val) {
p = p.next;
head = p;
continue;
}
// 寻找到要删除的节点
if (p.val == val) {
pre.next = p.next;
p = p.next;
} else {
// 更新pre,p
pre = p;
p = p.next;
}
}
return head;
}
}